diff --git a/catalog.json b/catalog.json index 3dad9f151d..ab4feb367e 100644 --- a/catalog.json +++ b/catalog.json @@ -13,7 +13,7 @@ "latest_version": "1.0.23", "latest_app_version": "v2.47.2", "latest_human_version": "v2.47.2_1.0.23", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "prometheus", "recommended": false, "title": "Prometheus", @@ -51,7 +51,7 @@ "latest_version": "1.0.29", "latest_app_version": "8.11.0", "latest_human_version": "8.11.0_1.0.29", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-08 12:52:59", "name": "elastic-search", "recommended": false, "title": "Elastic Search", @@ -88,7 +88,7 @@ "latest_version": "1.0.12", "latest_app_version": "7", "latest_human_version": "7_1.0.12", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "wg-easy", "recommended": false, "title": "WG Easy", @@ -125,7 +125,7 @@ "latest_version": "1.0.36", "latest_app_version": "1.26.0", "latest_human_version": "1.26.0_1.0.36", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-07 13:48:16", "name": "syncthing", "recommended": false, "title": "Syncthing", @@ -166,7 +166,7 @@ "latest_version": "1.0.14", "latest_app_version": "2.0.1", "latest_human_version": "2.0.1_1.0.14", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "diskoverdata", "recommended": false, "title": "Diskover Data", @@ -206,7 +206,7 @@ "latest_version": "1.7.20", "latest_app_version": "2023-03-13", "latest_human_version": "2023-03-13_1.7.20", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-02 14:04:59", "name": "minio", "recommended": false, "title": "MinIO", @@ -242,7 +242,7 @@ "latest_version": "1.0.119", "latest_app_version": "2023.11.1", "latest_human_version": "2023.11.1_1.0.119", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "home-assistant", "recommended": false, "title": "Home Assistant", @@ -279,7 +279,7 @@ "latest_version": "1.0.29", "latest_app_version": "4.7.14.0", "latest_human_version": "4.7.14.0_1.0.29", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "emby", "recommended": false, "title": "Emby Server", @@ -319,7 +319,7 @@ "latest_version": "1.2.22", "latest_app_version": "23.05.5.3.1", "latest_human_version": "23.05.5.3.1_1.2.22", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-31 12:13:07", "name": "collabora", "recommended": false, "title": "Collabora", @@ -357,7 +357,7 @@ "latest_version": "1.0.23", "latest_app_version": "2023.02.2", "latest_human_version": "2023.02.2_1.0.23", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "pihole", "recommended": false, "title": "Pi-hole", @@ -394,7 +394,7 @@ "latest_version": "1.6.52", "latest_app_version": "27.1.3", "latest_human_version": "27.1.3_1.6.52", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 12:28:58", "name": "nextcloud", "recommended": false, "title": "Nextcloud", @@ -435,7 +435,7 @@ "latest_version": "1.0.37", "latest_app_version": "v1.43.2", "latest_human_version": "v1.43.2_1.0.37", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-31 12:13:07", "name": "netdata", "recommended": false, "title": "Netdata", @@ -473,7 +473,7 @@ "latest_version": "1.0.32", "latest_app_version": "231021", "latest_human_version": "231021_1.0.32", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-22 13:21:32", "name": "photoprism", "recommended": false, "title": "PhotoPrism", @@ -511,7 +511,7 @@ "latest_version": "1.7.58", "latest_app_version": "1.32.7.7621", "latest_human_version": "1.32.7.7621_1.7.58", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-31 12:13:07", "name": "plex", "recommended": false, "title": "Plex", @@ -552,7 +552,7 @@ "latest_version": "1.0.16", "latest_app_version": "v1.68.2", "latest_human_version": "v1.68.2_1.0.16", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "storj", "recommended": false, "title": "Storj", @@ -590,7 +590,7 @@ "latest_version": "2308.0.1", "latest_app_version": "v1", "latest_human_version": "v1_2308.0.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "ix-chart", "recommended": false, "title": "ix-chart", @@ -621,7 +621,7 @@ "latest_version": "1.0.16", "latest_app_version": "3.0.10.1567", "latest_human_version": "3.0.10.1567_1.0.16", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-09-22 10:45:35", "name": "sonarr", "recommended": false, "title": "Sonarr", @@ -660,7 +660,7 @@ "latest_version": "1.0.13", "latest_app_version": "1.23.3", "latest_human_version": "1.23.3_1.0.13", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-09-08 15:07:33", "name": "syncthing", "recommended": false, "title": "Syncthing", @@ -699,7 +699,7 @@ "latest_version": "1.0.15", "latest_app_version": "10.8.12", "latest_human_version": "10.8.12_1.0.15", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "jellyfin", "recommended": false, "title": "Jellyfin", @@ -743,7 +743,7 @@ "latest_version": "1.1.2", "latest_app_version": "1.23.3", "latest_human_version": "1.23.3_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "syncthing", "recommended": false, "title": "Syncthing", @@ -827,7 +827,7 @@ "latest_version": "1.0.16", "latest_app_version": "v2.5.0", "latest_human_version": "v2.5.0_1.0.16", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "ddns-updater", "recommended": false, "title": "DDNS Updater", @@ -864,7 +864,7 @@ "latest_version": "1.1.1", "latest_app_version": "0.7.8", "latest_human_version": "0.7.8_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "kavita", "recommended": false, "title": "Kavita", @@ -906,7 +906,7 @@ "latest_version": "1.1.2", "latest_app_version": "1.10.1.4059", "latest_human_version": "1.10.1.4059_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-30 08:09:16", "name": "prowlarr", "recommended": false, "title": "Prowlarr", @@ -978,7 +978,7 @@ "latest_version": "1.1.2", "latest_app_version": "0.3.10.2287", "latest_human_version": "0.3.10.2287_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "readarr", "recommended": false, "title": "Readarr", @@ -1055,7 +1055,7 @@ "latest_version": "1.1.1", "latest_app_version": "13.8.0", "latest_human_version": "13.8.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "piwigo", "recommended": false, "title": "Piwigo", @@ -1093,7 +1093,7 @@ "latest_version": "1.1.1", "latest_app_version": "latest", "latest_human_version": "latest_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "logseq", "recommended": false, "title": "Logseq", @@ -1128,7 +1128,7 @@ "latest_version": "1.1.1", "latest_app_version": "5.0.3.8127", "latest_human_version": "5.0.3.8127_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "radarr", "recommended": false, "title": "Radarr", @@ -1168,7 +1168,7 @@ "latest_version": "1.0.22", "latest_app_version": "2.1.1", "latest_human_version": "2.1.1_1.0.22", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "chia", "recommended": false, "title": "Chia", @@ -1204,7 +1204,7 @@ "latest_version": "1.1.4", "latest_app_version": "1.7.1", "latest_human_version": "1.7.1_1.1.4", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "komga", "recommended": false, "title": "Komga", @@ -1242,7 +1242,7 @@ "latest_version": "1.1.1", "latest_app_version": "3.0.10.1567", "latest_human_version": "3.0.10.1567_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "sonarr", "recommended": false, "title": "Sonarr", @@ -1281,7 +1281,7 @@ "latest_version": "1.1.1", "latest_app_version": "2.3.1", "latest_human_version": "2.3.1_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "flame", "recommended": false, "title": "Flame", @@ -1318,7 +1318,7 @@ "latest_version": "1.1.3", "latest_app_version": "2023-11-04", "latest_human_version": "2023-11-04_1.1.3", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "metube", "recommended": false, "title": "MeTube", @@ -1395,7 +1395,7 @@ "latest_version": "1.0.11", "latest_app_version": "1.12.2", "latest_human_version": "1.12.2_1.0.11", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "zerotier", "recommended": false, "title": "Zerotier", @@ -1430,7 +1430,7 @@ "latest_version": "1.1.1", "latest_app_version": "1.6.5", "latest_human_version": "1.6.5_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "castopod", "recommended": false, "title": "Castopod", @@ -1467,7 +1467,7 @@ "latest_version": "1.1.2", "latest_app_version": "0.8.4", "latest_human_version": "0.8.4_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-02 11:28:44", "name": "whoogle", "recommended": false, "title": "Whoogle", @@ -1551,7 +1551,7 @@ "latest_version": "1.1.1", "latest_app_version": "6.0.2", "latest_human_version": "6.0.2_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "recyclarr", "recommended": false, "title": "Recyclarr", @@ -1588,7 +1588,7 @@ "latest_version": "1.1.1", "latest_app_version": "9.5.3", "latest_human_version": "9.5.3_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "deluge", "recommended": false, "title": "Deluge", @@ -1624,7 +1624,7 @@ "latest_version": "1.1.2", "latest_app_version": "4.3.14", "latest_human_version": "4.3.14_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "tiny-media-manager", "recommended": false, "title": "tinyMediaManager", @@ -1665,7 +1665,7 @@ "latest_version": "1.1.1", "latest_app_version": "0.13.4", "latest_human_version": "0.13.4_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "homarr", "recommended": false, "title": "Homarr", @@ -1704,7 +1704,7 @@ "latest_version": "1.1.2", "latest_app_version": "0.7.4", "latest_human_version": "0.7.4_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-01 15:12:25", "name": "homepage", "recommended": false, "title": "Homepage", @@ -1746,7 +1746,7 @@ "latest_version": "1.1.2", "latest_app_version": "1.4.0", "latest_human_version": "1.4.0_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 19:34:07", "name": "bazarr", "recommended": false, "title": "Bazarr", @@ -1784,7 +1784,7 @@ "latest_version": "1.0.12", "latest_app_version": "1.4.4.9", "latest_human_version": "1.4.4.9_1.0.12", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "terraria", "recommended": false, "title": "Terraria", @@ -1821,7 +1821,7 @@ "latest_version": "1.1.3", "latest_app_version": "1.33.0", "latest_human_version": "1.33.0_1.1.3", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-01 00:33:50", "name": "autobrr", "recommended": false, "title": "Autobrr", @@ -1859,7 +1859,7 @@ "latest_version": "1.0.18", "latest_app_version": "2.10.4", "latest_human_version": "2.10.4_1.0.18", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "nginx-proxy-manager", "recommended": false, "title": "Nginx Proxy Manager", @@ -1899,7 +1899,7 @@ "latest_version": "1.1.2", "latest_app_version": "6.4.0", "latest_human_version": "6.4.0_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-08 12:52:59", "name": "wordpress", "recommended": false, "title": "Wordpress", @@ -1939,7 +1939,7 @@ "latest_version": "1.0.13", "latest_app_version": "v1.4.230", "latest_human_version": "v1.4.230_1.0.13", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "mumble", "recommended": false, "title": "Mumble", @@ -1974,7 +1974,7 @@ "latest_version": "1.1.1", "latest_app_version": "1.2.3", "latest_human_version": "1.2.3_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "plex-auto-languages", "recommended": false, "title": "Plex Auto Languages", @@ -2050,7 +2050,7 @@ "latest_version": "1.1.1", "latest_app_version": "5.12", "latest_human_version": "5.12_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "omada-controller", "recommended": false, "title": "Omada Controller", @@ -2086,7 +2086,7 @@ "latest_version": "1.1.2", "latest_app_version": "4.4.0.1", "latest_human_version": "4.4.0.1_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-08 12:52:59", "name": "passbolt", "recommended": false, "title": "Passbolt", @@ -2127,7 +2127,7 @@ "latest_version": "1.1.1", "latest_app_version": "2.00.20.1", "latest_human_version": "2.00.20.1_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "tdarr", "recommended": false, "title": "Tdarr", @@ -2205,7 +2205,7 @@ "latest_version": "1.1.4", "latest_app_version": "1.15.2", "latest_human_version": "1.15.2_1.1.4", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-08 12:52:59", "name": "n8n", "recommended": false, "title": "n8n", @@ -2246,7 +2246,7 @@ "latest_version": "1.0.16", "latest_app_version": "1.33.2", "latest_human_version": "1.33.2_1.0.16", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "overseerr", "recommended": false, "title": "Overseerr", @@ -2286,7 +2286,7 @@ "latest_version": "1.1.2", "latest_app_version": "10.8.12", "latest_human_version": "10.8.12_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "jellyfin", "recommended": false, "title": "Jellyfin", @@ -2328,7 +2328,7 @@ "latest_version": "1.0.25", "latest_app_version": "0.107.40", "latest_human_version": "0.107.40_1.0.25", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "adguard-home", "recommended": false, "title": "AdGuard Home", @@ -2406,7 +2406,7 @@ "latest_version": "1.1.1", "latest_app_version": "2.8.3", "latest_human_version": "2.8.3_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "distribution", "recommended": false, "title": "Distribution", @@ -2443,7 +2443,7 @@ "latest_version": "1.1.2", "latest_app_version": "2.0.1.3769", "latest_human_version": "2.0.1.3769_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 12:56:51", "name": "lidarr", "recommended": false, "title": "Lidarr", @@ -2482,7 +2482,7 @@ "latest_version": "1.1.4", "latest_app_version": "2023.10.31", "latest_human_version": "2023.10.31_1.1.4", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-01 00:33:50", "name": "searxng", "recommended": false, "title": "SearXNG", @@ -2517,7 +2517,7 @@ "latest_version": "1.0.12", "latest_app_version": "7.2.3", "latest_human_version": "7.2.3_1.0.12", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-03 10:53:23", "name": "redis", "recommended": false, "title": "Redis", @@ -2552,7 +2552,7 @@ "latest_version": "1.0.12", "latest_app_version": "1.0.1", "latest_human_version": "1.0.1_1.0.12", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "clamav", "recommended": false, "title": "Clam AV", @@ -2587,7 +2587,7 @@ "latest_version": "1.1.2", "latest_app_version": "22.0.8", "latest_human_version": "22.0.8_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "drawio", "recommended": false, "title": "Draw.IO", @@ -2627,7 +2627,7 @@ "latest_version": "1.0.34", "latest_app_version": "1.84.0", "latest_human_version": "1.84.0_1.0.34", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-06 13:16:02", "name": "immich", "recommended": false, "title": "Immich", @@ -2663,7 +2663,7 @@ "latest_version": "1.1.1", "latest_app_version": "1.1.8-2", "latest_human_version": "1.1.8-2_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "rust-desk", "recommended": false, "title": "Rust Desk", @@ -2699,7 +2699,7 @@ "latest_version": "1.0.10", "latest_app_version": "1.7.0", "latest_human_version": "1.7.0_1.0.10", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "jellyseerr", "recommended": false, "title": "Jellyseerr", @@ -2815,7 +2815,7 @@ "latest_version": "1.1.2", "latest_app_version": "latest", "latest_human_version": "latest_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 19:42:08", "name": "briefkasten", "recommended": false, "title": "Briefkasten", @@ -2855,7 +2855,7 @@ "latest_version": "1.1.2", "latest_app_version": "2.26.0", "latest_human_version": "2.26.0_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-03 10:53:23", "name": "filebrowser", "recommended": false, "title": "File Browser", @@ -2895,7 +2895,7 @@ "latest_version": "1.0.24", "latest_app_version": "v0.23.0", "latest_human_version": "v0.23.0_1.0.24", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "ipfs", "recommended": false, "title": "IPFS", @@ -2934,7 +2934,7 @@ "latest_version": "1.1.1", "latest_app_version": "3.1.0", "latest_human_version": "3.1.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "node-red", "recommended": false, "title": "Node-RED", @@ -2971,7 +2971,7 @@ "latest_version": "1.0.11", "latest_app_version": "latest", "latest_human_version": "latest_1.0.11", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "mineos", "recommended": false, "title": "MineOS", @@ -3008,7 +3008,7 @@ "latest_version": "1.1.2", "latest_app_version": "2.13.2", "latest_human_version": "2.13.2_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "tautulli", "recommended": false, "title": "Tautulli", @@ -3049,7 +3049,7 @@ "latest_version": "1.1.1", "latest_app_version": "v2.5.4", "latest_human_version": "v2.5.4_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "sftpgo", "recommended": false, "title": "SFTPGo", @@ -3084,7 +3084,7 @@ "latest_version": "1.1.1", "latest_app_version": "2.0.0", "latest_human_version": "2.0.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "pigallery2", "recommended": false, "title": "PiGallery2", @@ -3130,7 +3130,7 @@ "latest_version": "1.1.2", "latest_app_version": "0.10.1", "latest_human_version": "0.10.1_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-02 11:28:44", "name": "unifi-protect-backup", "recommended": false, "title": "Unifi Protect Backup", @@ -3166,7 +3166,7 @@ "latest_version": "1.1.1", "latest_app_version": "23.10.1", "latest_human_version": "23.10.1_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "homer", "recommended": false, "title": "Homer", @@ -3204,7 +3204,7 @@ "latest_version": "1.1.1", "latest_app_version": "0.49.3", "latest_human_version": "0.49.3_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "navidrome", "recommended": false, "title": "Navidrome", @@ -3241,7 +3241,7 @@ "latest_version": "1.0.8", "latest_app_version": "1.0.0", "latest_human_version": "1.0.0_1.0.8", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-19 04:50:58", "name": "rsyncd", "recommended": false, "title": "Rsync Daemon", @@ -3277,7 +3277,7 @@ "latest_version": "1.1.2", "latest_app_version": "2023.11.0", "latest_human_version": "2023.11.0_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-07 13:48:16", "name": "minecraft", "recommended": false, "title": "Minecraft", @@ -3313,7 +3313,7 @@ "latest_version": "1.1.1", "latest_app_version": "4.6.0", "latest_human_version": "4.6.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "qbittorrent", "recommended": false, "title": "qBittorrent", @@ -3351,7 +3351,7 @@ "latest_version": "1.0.12", "latest_app_version": "2.4.58", "latest_human_version": "2.4.58_1.0.12", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-20 04:50:38", "name": "webdav", "recommended": false, "title": "WebDAV", @@ -3386,7 +3386,7 @@ "latest_version": "1.1.1", "latest_app_version": "4.1.0", "latest_human_version": "4.1.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "sabnzbd", "recommended": false, "title": "SABnzbd", @@ -3426,7 +3426,7 @@ "latest_version": "1.1.1", "latest_app_version": "2.414.3", "latest_human_version": "2.414.3_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "jenkins", "recommended": false, "title": "Jenkins", @@ -3466,7 +3466,7 @@ "latest_version": "1.1.1", "latest_app_version": "7.5.176", "latest_human_version": "7.5.176_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "unifi-controller", "recommended": false, "title": "Unifi Controller", @@ -3540,7 +3540,7 @@ "latest_version": "1.1.1", "latest_app_version": "2.9", "latest_human_version": "2.9_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "fscrawler", "recommended": false, "title": "FSCrawler", @@ -3577,7 +3577,7 @@ "latest_version": "1.1.1", "latest_app_version": "1.0.0", "latest_human_version": "1.0.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "kapowarr", "recommended": false, "title": "Kapowarr", @@ -3615,7 +3615,7 @@ "latest_version": "1.1.1", "latest_app_version": "7.8", "latest_human_version": "7.8_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "pgadmin", "recommended": false, "title": "pgAdmin", @@ -3655,7 +3655,7 @@ "latest_version": "1.1.1", "latest_app_version": "4.2.3", "latest_human_version": "4.2.3_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "twofactor-auth", "recommended": false, "title": "2FAuth", @@ -3693,7 +3693,7 @@ "latest_version": "1.1.2", "latest_app_version": "2023.10.0", "latest_human_version": "2023.10.0_1.1.2", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-01 00:33:50", "name": "cloudflared", "recommended": false, "title": "Cloudflared", @@ -3729,7 +3729,7 @@ "latest_version": "1.0.21", "latest_app_version": "1.52.0", "latest_human_version": "1.52.0_1.0.21", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-11-01 00:33:50", "name": "tailscale", "recommended": false, "title": "Tailscale", @@ -3802,7 +3802,7 @@ "latest_version": "1.0.9", "latest_app_version": "1.0.0", "latest_human_version": "1.0.0_1.0.9", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "tftpd-hpa", "recommended": false, "title": "TFTP Server", @@ -3837,7 +3837,7 @@ "latest_version": "1.1.1", "latest_app_version": "10.2.0", "latest_human_version": "10.2.0_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "grafana", "recommended": false, "title": "Grafana", @@ -3878,7 +3878,7 @@ "latest_version": "1.1.1", "latest_app_version": "0.12.1", "latest_human_version": "0.12.1_1.1.1", - "last_update": "2023-11-09 07:52:17", + "last_update": "2023-10-28 18:49:10", "name": "frigate", "recommended": false, "title": "Frigate", diff --git a/charts/collabora/app_versions.json b/charts/collabora/app_versions.json new file mode 100644 index 0000000000..44bf4f17e6 --- /dev/null +++ b/charts/collabora/app_versions.json @@ -0,0 +1,439 @@ +{ + "1.2.22": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/collabora/1.2.22", + "last_update": "2023-10-31 12:13:07", + "required_features": [ + "definitions/certificate", + "definitions/nodeIP", + "definitions/timezone" + ], + "human_version": "23.05.5.3.1_1.2.22", + "version": "1.2.22", + "chart_metadata": { + "name": "collabora", + "description": "Collabora Online Development Edition \\u2013 an awesome, Online Office\nsuite image suitable for home use.\n", + "annotations": { + "title": "Collabora" + }, + "type": "application", + "version": "1.2.22", + "apiVersion": "v2", + "appVersion": "23.05.5.3.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://github.com/CollaboraOnline/online", + "icon": "https://media.sys.truenas.net/apps/collabora/icons/icon.png", + "sources": [ + "https://github.com/CollaboraOnline/online.git", + "https://hub.docker.com/r/collabora/code" + ], + "keywords": [ + "office", + "documents", + "productivity" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "cool", + "groupName": "cool", + "gid": 104, + "uid": 106, + "description": "Collabora runs as non-root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Nginx runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Collabora and Nginx are able to chown files." + }, + { + "name": "FOWNER", + "description": "Collabora and Nginx are able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Collabora and Nginx are able to use chroot." + }, + { + "name": "MKNOD", + "description": "Collabora and Nginx are able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Nginx is able to bypass permission checks." + }, + { + "name": "SETGID", + "description": "Nginx is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Nginx is able to set user ID for it's sub-processes." + }, + { + "name": "FSETID", + "description": "Nginx is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Nginx is able to kill processes." + }, + { + "name": "SETPCAP", + "description": "Nginx is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Nginx is able to bind to privileged ports." + }, + { + "name": "NET_RAW", + "description": "Nginx is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Nginx is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Collabora Configuration", + "description": "Configure Collabora" + }, + { + "name": "Collabora Environment Variables", + "description": "Set the environment that will be visible to the container" + }, + { + "name": "Networking", + "description": "Configure Networking for Collabora" + }, + { + "name": "Storage", + "description": "Configure Storage for Collabora" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "https" + ], + "host": [ + "$variable-config.server_name" + ], + "ports": [ + "$variable-nodePort" + ], + "path": "/browser/dist/admin/admin.html" + } + }, + "questions": [ + { + "variable": "config", + "label": "Container Configuration", + "group": "Collabora Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "timezone", + "label": "Timezone", + "group": "Collabora Configuration", + "schema": { + "type": "string", + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ], + "default": "America/Los_Angeles" + } + }, + { + "variable": "enableWebUI", + "label": "Enable WebUI", + "description": "Enable WebUI for Collabora\nIf you enable this, you will need to set a username and password
\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "username", + "label": "Username for WebUI", + "show_if": [ + [ + "enableWebUI", + "=", + true + ] + ], + "schema": { + "type": "string", + "default": "admin", + "required": true + } + }, + { + "variable": "password", + "label": "Password for WebUI", + "schema": { + "type": "string", + "private": true, + "default": "changeme", + "show_if": [ + [ + "enableWebUI", + "=", + true + ] + ], + "valid_chars": "[a-zA-Z0-9!@#%^&*?]{8,}", + "valid_chars_error": "Password must be at least 8 characters long
\nCan contain at numbers, letters, and the following characters: !@#%^&*?\n", + "required": true + } + }, + { + "variable": "aliasgroup1", + "label": "Alias Group 1", + "description": "List of domains that will be allowed to access the Collabora server\nType one domain per line\n", + "schema": { + "type": "list", + "items": [ + { + "variable": "alias", + "label": "Alias", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "dictionaries", + "label": "Dictionaries to use, leave empty to use all", + "schema": { + "type": "string", + "default": "de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" + } + }, + { + "variable": "extra_params", + "label": "Extra Parameters to add", + "description": "e.g. \"--o:welcome.enable=false\", See more on /etc/loolwsd/loowsd.xml. Separate params with space", + "schema": { + "type": "string", + "default": "--o:welcome.enable=false --o:user_interface.mode=notebookbar --o:ssl.termination=true --o:ssl.enable=false --o:net.proto=IPv4" + } + }, + { + "variable": "server_name", + "label": "Server Name", + "description": "When this environment variable is set (is not \u201c\u201d), then its value will be used as server name in /etc/loolwsd/loolwsd.xml.\nWithout this, CODE is not delivering a correct host for the websocket connection in case of a proxy in front of it.
\nIf a port is not specified, the below configured Node Port will be used.\n", + "schema": { + "type": "string", + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "certificate", + "description": "Collabora Certificate
\nIf you do not choose a certificate and do not configure an external reverse proxy
\nyou might have to adjust the extra_params.\n", + "label": "Certificate", + "group": "Collabora Configuration", + "schema": { + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "null": true, + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Collabora Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Collabora Host Path Volume", + "description": "Add an extra host path volume for Collabora application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "environmentVariables", + "label": "Environment Variables", + "group": "Collabora Environment Variables", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "nodePort", + "label": "Node Port to use for Collabora", + "group": "Networking", + "schema": { + "type": "int", + "default": 9980, + "min": 9000, + "max": 65535 + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Collabora Online Development Edition

\n

An awesome, Online Office suite image suitable for home use.\nWith the Collabora Online Development Edition (CODE) Docker Image you can host\nyour own online Office Suite at home! This Docker image is aimed at home users\nand contains the latest and greatest developments. Simply integrate it in your\npreferred File Sync and Share (FSS), to easily get your own online Office \nSuite up and running!

", + "detailed_readme": "

Collabora Online Development Edition

\n

Collabora Online Development Edition - An awesome, Online Office suite image suitable for home use!\nIntroduction

\n
\n

This chart bootstraps Collabora deployment on a Kubernetes cluster using the Helm package manager.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/diskoverdata/app_versions.json b/charts/diskoverdata/app_versions.json new file mode 100644 index 0000000000..c7f08ae5bf --- /dev/null +++ b/charts/diskoverdata/app_versions.json @@ -0,0 +1,644 @@ +{ + "1.0.14": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/diskoverdata/1.0.14", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2.0.1_1.0.14", + "version": "1.0.14", + "chart_metadata": { + "name": "diskoverdata", + "description": "Diskover is used to monitor size/volumes of distributed dataset.", + "annotations": { + "title": "Diskover Data" + }, + "type": "application", + "version": "1.0.14", + "apiVersion": "v2", + "appVersion": "2.0.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://github.com/diskoverdata/diskover-community", + "icon": "https://media.sys.truenas.net/apps/diskoverdata/icons/icon.png", + "sources": [ + "https://github.com/diskoverdata/diskover-community", + "https://github.com/truenas/charts/tree/master/charts/diskoverdata" + ], + "keywords": [ + "storage", + "monitoring", + "management" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Diskover runs as root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Elastic Search runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Diskover and Elastic Search are able to chown files." + }, + { + "name": "FOWNER", + "description": "Diskover and Elastic Search are able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Diskover and Elastic Search are able to use chroot." + }, + { + "name": "MKNOD", + "description": "Diskover and Elastic Search are able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Diskover and Elastic Search are able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Diskover and Elastic Search are able to set file capabilities." + }, + { + "name": "KILL", + "description": "Diskover and Elastic Search are able to kill processes." + }, + { + "name": "SETGID", + "description": "Diskover and Elastic Search are able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Diskover and Elastic Search are able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Diskover and Elastic Search are able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Diskover and Elastic Search are able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Diskover and Elastic Search are able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Diskover and Elastic Search are able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Diskover and Elastic Search are able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "Diskover application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for Diskover" + }, + { + "name": "Networking", + "description": "Networking Configuration for Diskover" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-web_port" + ], + "path": "/" + } + }, + "questions": [ + { + "variable": "web_port", + "label": "Web Port for Diskover", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 22510, + "required": true + } + }, + { + "variable": "timezone", + "label": "Configure timezone", + "group": "Configuration", + "description": "Configure timezone for Diskover", + "schema": { + "type": "string", + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ], + "default": "America/Los_Angeles" + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ownerUID", + "label": "Config folder's user id", + "description": "Linuxserver uses this user id to configure config's folders permissions", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "ownerGID", + "label": "Config folder's group id", + "description": "Linuxserver uses this group id to configure config's folders permissions", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "diskoverCredentials", + "description": "Configure Diskover Initial Password", + "label": "Configure Diskover Initial Username and password", + "group": "Configuration", + "schema": { + "type": "dict", + "required": true, + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "Username", + "description": "UserName for Diskover User", + "schema": { + "type": "string", + "default": "admin", + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "Initial Password for Diskover User", + "schema": { + "type": "string", + "private": true, + "default": "changeme", + "required": true + } + } + ] + } + }, + { + "variable": "environmentVariables", + "label": "Diskover Extra Environment", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "cronjobSchedule", + "description": "Cronjobs Consist on 5 values in this specific format 'Minute Hour Day Month Week'", + "label": "Define cronjob schedule for diskover", + "group": "Configuration", + "schema": { + "type": "string", + "default": "0 3 * * *" + } + }, + { + "variable": "appVolumeMounts", + "label": "Diskover Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Storage Volume for Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-config", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/config" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Diskover Configuration Storage Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Diskover Configuration Storage Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "data", + "label": "Storage Volume for Data", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-data", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/data" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Diskover Data folder to monitor", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Diskover Data folder to monitor", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraDataVolumeMounts", + "label": "Add Extra Host Paths For Diskover To Monitor", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "dataAppVolume", + "label": "Host Path Volume", + "description": "Add extra Data Volumes for diskover to monitor", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Diskover application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "elasticSearchAppVolumeMounts", + "label": "elastic search Storage", + "group": "Storage", + "schema": { + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "esdata", + "label": "Storage Volume for Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Storage Volume Dataset Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-elasticsearch-data", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "default": "/usr/share/elasticsearch/data" + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

DiskOver App for TrueNAS SCALE

", + "detailed_readme": "

DiskOverData

\n

DiskOver App for TrueNAS SCALE

\n

Diskover is a sustainable file management solution for your distributed data.

\n

Introduction

\n

This chart is based on diskoverdata and \ndeployed on kubernetes via helm chart

\n

Configuration

\n

Please refer to questions.yaml for a detailed overview on supported configurable values.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/elastic-search/app_versions.json b/charts/elastic-search/app_versions.json new file mode 100644 index 0000000000..b3475127b2 --- /dev/null +++ b/charts/elastic-search/app_versions.json @@ -0,0 +1,357 @@ +{ + "1.0.29": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/elastic-search/1.0.29", + "last_update": "2023-11-08 12:52:59", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "8.11.0_1.0.29", + "version": "1.0.29", + "chart_metadata": { + "name": "elastic-search", + "description": "Elasticsearch is the distributed, RESTful search and analytics engine at the heart of the Elastic Stack.", + "annotations": { + "title": "Elastic Search" + }, + "type": "application", + "version": "1.0.29", + "apiVersion": "v2", + "appVersion": "8.11.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://www.elastic.co", + "icon": "https://media.sys.truenas.net/apps/elastic-search/icons/icon.svg", + "sources": [ + "https://www.elastic.co/", + "https://github.com/truenas/charts/tree/master/charts/elastic-search", + "https://www.elastic.co/guide/en/elasticsearch/reference/master/docker.html#docker-configuration-methods" + ], + "keywords": [ + "search", + "elastic" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "elasticsearch", + "groupName": "elasticsearch", + "gid": 1000, + "uid": 1000, + "description": "Elastic Search runs as non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Elastic Search Configuration", + "description": "Configure Elastic Search" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Elastic Search" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Elastic Search" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Elastic Search" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Elastic Search" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "esConfig", + "label": "", + "group": "Elastic Search Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "password", + "label": "Password", + "description": "The password for the Elastic Search (elastic) user.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "nodeName", + "label": "Node Name", + "description": "The name of the Elastic Search node.", + "schema": { + "type": "string", + "default": "elastic_search_node", + "required": true + } + }, + { + "variable": "heapSize", + "label": "Heap Size", + "description": "The heap size for Elastic Search.", + "schema": { + "type": "string", + "default": "512m", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Elastic Search.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "esNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "httpPort", + "label": "HTTP Port", + "description": "The port for the Elastic Search HTTP", + "schema": { + "type": "int", + "default": 30003, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Elastic Search
\n", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "esStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Elastic Search Data Storage", + "description": "The path to store Elastic Search data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Elastic Search.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Elastic Search.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Elastic Search

\n
\n

During the installation process, a container will be launched with root privileges. This is required\nin order to apply the correct permissions to the Elastic Search data directory. Afterward, the Elastic Search container\nwill run as a non-root user (default 568).

\n
\n

If you want to apply additional configuration you can by using additional environment variables.

\n

See the Elastic Search documentation\nfor more information.

", + "detailed_readme": "

Elastic Search

\n
\n

During the installation process, a container will be launched with root privileges. This is required\nin order to apply the correct permissions to the Elastic Search data directory. Afterward, the Elastic Search container\nwill run as a non-root user (default 568).

\n
\n

If you want to apply additional configuration you can by using additional environment variables.

\n

See the Elastic Search documentation\nfor more information.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/emby/app_versions.json b/charts/emby/app_versions.json new file mode 100644 index 0000000000..e4c0a9ce5a --- /dev/null +++ b/charts/emby/app_versions.json @@ -0,0 +1,438 @@ +{ + "1.0.29": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/emby/1.0.29", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/ixVolume", + "definitions/gpuConfiguration" + ], + "human_version": "4.7.14.0_1.0.29", + "version": "1.0.29", + "chart_metadata": { + "name": "emby", + "description": "Emby Server", + "annotations": { + "title": "Emby Server" + }, + "type": "application", + "version": "1.0.29", + "apiVersion": "v2", + "appVersion": "4.7.14.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://emby.media/", + "icon": "https://media.sys.truenas.net/apps/emby/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/emby/embyserver" + ], + "keywords": [ + "emby", + "media" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Emby runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Emby is able to chown files." + }, + { + "name": "FOWNER", + "description": "Emby is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Emby is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Emby is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Emby is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Emby is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Emby is able to kill processes." + }, + { + "name": "SETGID", + "description": "Emby is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Emby is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Emby is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Emby is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Emby is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Emby is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Emby is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Emby Server Configuration", + "description": "Configure Emby Server" + }, + { + "name": "Networking", + "description": "Configure networking for container" + }, + { + "name": "Storage", + "description": "Persist and share data that is separate from the lifecycle of the container" + }, + { + "name": "Workload Details", + "description": "Configure how workload should be deployed" + }, + { + "name": "Scaling/Upgrade Policy", + "description": "Configure how pods are replaced when configuration is upgraded" + }, + { + "name": "Restart Policy", + "description": "Configure when pod should be restarted in case of failure" + }, + { + "name": "Resource Reservation", + "description": "Specify resources to be allocated to workload" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "/web" + } + }, + "questions": [ + { + "variable": "hostNetwork", + "label": "Enable Host Network", + "group": "Networking", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "environmentVariables", + "label": "Environment Variables for Emby Server", + "group": "Emby Server Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "updateStrategy", + "description": "Upgrade Policy", + "label": "Update Strategy", + "group": "Scaling/Upgrade Policy", + "schema": { + "type": "string", + "default": "Recreate", + "enum": [ + { + "value": "RollingUpdate", + "description": "Create new pods and then kill old ones" + }, + { + "value": "Recreate", + "description": "Kill existing pods before creating new ones" + } + ] + } + }, + { + "variable": "embyServerHttp", + "label": "Configure Emby Server HTTP Service", + "group": "Networking", + "schema": { + "show_if": [ + [ + "hostNetwork", + "!=", + true + ] + ], + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port to expose for Emby Server UI", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 9096 + } + } + ] + } + }, + { + "variable": "gpuConfiguration", + "label": "GPU Configuration", + "group": "Resource Reservation", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + }, + { + "variable": "appVolumeMounts", + "label": "Emby Server Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Config Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Emby Server Config Volume Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-emby_config", + "editable": false, + "hidden": true + } + }, + { + "variable": "mountPath", + "label": "Emby Server Config Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "hidden": true, + "default": "/config" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Emby Server Config Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Emby Server Config Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Emby Server Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Emby Server Host Path Volume", + "description": "Add an extra host path volume for emby application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "description": "Mount hostpath in read-only mode", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Emby Server

\n

Emby Server is a personal media server with apps on just about every device

", + "detailed_readme": "

Emby Server helm chart

\n

Configuration

\n

Please refer to questions.yaml for a detailed overview on supported configurable items.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/home-assistant/app_versions.json b/charts/home-assistant/app_versions.json new file mode 100644 index 0000000000..50081242bd --- /dev/null +++ b/charts/home-assistant/app_versions.json @@ -0,0 +1,600 @@ +{ + "1.0.119": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/home-assistant/1.0.119", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2023.11.1_1.0.119", + "version": "1.0.119", + "chart_metadata": { + "name": "home-assistant", + "description": "Home Assistant App for TrueNAS SCALE", + "annotations": { + "title": "Home Assistant" + }, + "type": "application", + "version": "1.0.119", + "apiVersion": "v2", + "appVersion": "2023.11.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://github.com/home-assistant/home-assistant", + "icon": "https://media.sys.truenas.net/apps/home-assistant/icons/icon.png", + "sources": [ + "https://github.com/home-assistant/home-assistant", + "https://github.com/truenas/charts/tree/master/charts/home-assistant" + ], + "keywords": [ + "home-automation" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Home-Assistant runs as root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Postgres runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Home Assistant and Postgres are able to chown files." + }, + { + "name": "FOWNER", + "description": "Home Assistant and Postgres are able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Home Assistant and Postgres are able to use chroot." + }, + { + "name": "MKNOD", + "description": "Home Assistant and Postgres are able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Home Assistant and Postgres are able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Home Assistant and Postgres are able to set file capabilities." + }, + { + "name": "KILL", + "description": "Home Assistant and Postgres are able to kill processes." + }, + { + "name": "SETGID", + "description": "Home Assistant and Postgres are able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Home Assistant and Postgres are able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Home Assistant and Postgres are able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Home Assistant and Postgres are able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Home Assistant and Postgres are able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Home Assistant and Postgres are able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Home Assistant and Postgres are able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "Home Assistant application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for homeassistant" + }, + { + "name": "Networking", + "description": "Networking Configuration for homeassistant" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-web_port" + ], + "path": "/" + } + }, + "questions": [ + { + "variable": "web_port", + "label": "Web Port for homeassistant", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 20810, + "required": true + } + }, + { + "variable": "timezone", + "label": "Configure timezone", + "group": "Configuration", + "description": "Configure timezone for Home Assistant", + "schema": { + "type": "string", + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ], + "default": "America/Los_Angeles" + } + }, + { + "variable": "hostNetwork", + "label": "Enable Host Network", + "group": "Networking", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ownerUID", + "label": "Storage User ID", + "description": "User ID of the storage volume being used (application will chown the storage volume path with specified UID)", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "ownerGID", + "label": "Storage Group ID", + "description": "Group ID of the storage volume being used (application will chown the storage volume path with specified GID)", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "environmentVariables", + "label": "Home Assistant environment", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Home Assistant Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Storage Volume for Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-config", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/config" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Home Assistant Configuration Storage Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Home Assistant Configuration Storage Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "media", + "label": "Storage Volume for Media", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Media Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-media", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Media Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/media" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Home Assistant Media Storage Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Home Assistant Media Storage Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "postgresAppVolumeMounts", + "label": "Postgres Storage", + "group": "Storage", + "schema": { + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "postgres-data", + "label": "Postgres Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Data Volume Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_data", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "default": "/var/lib/postgresql/data" + } + } + ] + } + }, + { + "variable": "postgres-backup", + "label": "Postgres Backup Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Backup Volume Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_backups", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Backup Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "default": "/postgres_backups" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Home Assistant application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

home-assistant App for TrueNAS SCALE

", + "detailed_readme": "

Introduction

\n

home assistant App for TrueNAS SCALE

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/ix-chart/app_versions.json b/charts/ix-chart/app_versions.json new file mode 100644 index 0000000000..2db28e3d31 --- /dev/null +++ b/charts/ix-chart/app_versions.json @@ -0,0 +1,1106 @@ +{ + "2308.0.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/ix-chart/2308.0.1", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/interfaceConfiguration", + "normalize/ixVolume", + "definitions/nodeIP", + "definitions/gpuConfiguration", + "definitions/interface" + ], + "human_version": "2308.0.1", + "version": "2308.0.1", + "chart_metadata": { + "name": "ix-chart", + "description": "A Helm chart for deploying simple workloads Kubernetes", + "annotations": { + "title": "ix-chart" + }, + "type": "application", + "version": "2308.0.1", + "apiVersion": "v2", + "appVersion": "v1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://www.truenas.com/", + "icon": "https://media.sys.truenas.net/apps/ix-chart/icons/icon.webp", + "keywords": [], + "sources": [] + }, + "app_metadata": { + "runAsContext": [], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Container Images", + "description": "Image to be used for container" + }, + { + "name": "Container Entrypoint", + "description": "Configuration of the executable that will be run when the container is started" + }, + { + "name": "Container Environment Variables", + "description": "Set the environment that will be visible to the container" + }, + { + "name": "Networking", + "description": "Configure networking for container" + }, + { + "name": "Port Forwarding", + "description": "Configure ports to forward to workload" + }, + { + "name": "Storage", + "description": "Persist and share data that is separate from the lifecycle of the container" + }, + { + "name": "Health Check", + "description": "Define mechanism to periodically probe the container to ensure it's functioning as desired" + }, + { + "name": "Workload Details", + "description": "Configure how workload should be deployed" + }, + { + "name": "Scaling/Upgrade Policy", + "description": "Configure how pods are replaced when configuration is upgraded" + }, + { + "name": "Restart Policy", + "description": "Configure when pod should be restarted in case of failure" + }, + { + "name": "Resource Reservation", + "description": "Specify resources to be allocated to workload" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + }, + { + "name": "Portal Configuration", + "description": "Configure UI web portal" + } + ], + "questions": [ + { + "variable": "enableUIPortal", + "label": "Enable WebUI Portal", + "description": "Enable webui portal for easier access to workload (Only valid for TrueNAS SCALE Bluefin and later)", + "group": "Portal Configuration", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "portalDetails", + "label": "WebUI Portal", + "description": "Configure WebUI Portal", + "group": "Portal Configuration", + "schema": { + "show_if": [ + [ + "enableUIPortal", + "=", + true + ] + ], + "type": "dict", + "attrs": [ + { + "variable": "portalName", + "label": "Portal Name", + "description": "Specify a UI Portal name to use which would be displayed in the UI", + "schema": { + "type": "string", + "default": "Web Portal" + } + }, + { + "variable": "protocol", + "label": "Protocol for Portal", + "description": "Specify protocol for portal", + "schema": { + "type": "string", + "default": "http", + "enum": [ + { + "value": "http", + "description": "HTTP Protocol" + }, + { + "value": "https", + "description": "HTTPS Protocol" + } + ] + } + }, + { + "variable": "useNodeIP", + "label": "Use Node IP for Portal IP/Domain", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "host", + "description": "IP/Domain to use for accessing the portal", + "label": "Portal IP/Domain", + "schema": { + "show_if": [ + [ + "useNodeIP", + "=", + false + ] + ], + "type": "string", + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + }, + { + "variable": "port", + "label": "Port", + "description": "Specify port to be used for Portal access", + "schema": { + "type": "int", + "max": 65535, + "default": 15000 + } + } + ] + } + }, + { + "variable": "workloadType", + "description": "Please specify type of workload to deploy", + "label": "Workload Type", + "group": "Workload Details", + "schema": { + "type": "string", + "hidden": true, + "default": "Deployment", + "required": true, + "enum": [ + { + "value": "Deployment", + "description": "Deploy a Deployment workload" + }, + { + "value": "Job", + "description": "Deploy job workload" + }, + { + "value": "CronJob", + "description": "Deploy cronjob workload" + } + ] + } + }, + { + "variable": "cronSchedule", + "label": "Cron Schedule", + "group": "Workload Details", + "schema": { + "hidden": true, + "type": "cron", + "show_if": [ + [ + "workloadType", + "=", + "CronJob" + ] + ], + "default": { + "minute": "5" + } + } + }, + { + "variable": "image", + "description": "Docker Image Details", + "label": "Docker Image", + "group": "Container Images", + "schema": { + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "repository", + "description": "Docker image repository", + "label": "Image repository", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "tag", + "description": "Tag to use for specified image", + "label": "Image Tag", + "schema": { + "type": "string", + "default": "latest" + } + }, + { + "variable": "pullPolicy", + "description": "Docker Image Pull Policy", + "label": "Image Pull Policy", + "schema": { + "type": "string", + "default": "IfNotPresent", + "enum": [ + { + "value": "IfNotPresent", + "description": "Only pull image if not present on host" + }, + { + "value": "Always", + "description": "Always pull image even if present on host" + }, + { + "value": "Never", + "description": "Never pull image even if it's not present on host" + } + ] + } + } + ] + } + }, + { + "variable": "updateStrategy", + "description": "Upgrade Policy", + "label": "Update Strategy", + "group": "Scaling/Upgrade Policy", + "schema": { + "type": "string", + "show_if": [ + [ + "workloadType", + "=", + "Deployment" + ] + ], + "default": "Recreate", + "enum": [ + { + "value": "RollingUpdate", + "description": "Create new pods and then kill old ones" + }, + { + "value": "Recreate", + "description": "Kill existing pods before creating new ones" + } + ] + } + }, + { + "variable": "jobRestartPolicy", + "description": "Restart Policy for Job", + "label": "Restart Policy", + "group": "Restart Policy", + "schema": { + "hidden": true, + "type": "string", + "default": "OnFailure", + "show_if": [ + [ + "workloadType", + "!=", + "Deployment" + ] + ], + "enum": [ + { + "value": "OnFailure", + "description": "Only restart job if it fails" + }, + { + "value": "Never", + "description": "Never restart job even if it fails" + } + ] + } + }, + { + "variable": "containerCommand", + "description": "Commands to execute inside container overriding image CMD default", + "label": "Container CMD", + "group": "Container Entrypoint", + "schema": { + "type": "list", + "items": [ + { + "variable": "command", + "description": "Container Command", + "label": "Command", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "containerArgs", + "description": "Specify arguments for container command", + "label": "Container Args", + "group": "Container Entrypoint", + "schema": { + "type": "list", + "items": [ + { + "variable": "arg", + "description": "Container Arg", + "label": "Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "containerEnvironmentVariables", + "description": "Container Environment Variables", + "label": "Container Environment Variables", + "group": "Container Environment Variables", + "schema": { + "type": "list", + "items": [ + { + "variable": "environmentVariable", + "description": "Container Environment Variable", + "label": "Container Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "description": "Environment Variable Name", + "label": "Environment Variable Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "description": "Environment Variable Value", + "label": "Environment Variable Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "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": { + "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": "dnsPolicy", + "label": "DNS Policy", + "description": "Default behaviour is where Pod inherits the name resolution configuration from the node that the pods run on, if None is specified, It allows a Pod to ignore DNS settings from the Kubernetes environment.", + "group": "Networking", + "schema": { + "type": "string", + "default": "Default", + "enum": [ + { + "value": "Default", + "description": "Use Default DNS Policy where Pod will inherit the name resolution configuration from the node." + }, + { + "value": "ClusterFirst", + "description": "\"Kubernetes internal DNS will be prioritised and resolved first. If the domain does not resolve with internal kubernetes DNS, the DNS query will be forwarded to the upstream nameserver inherited from the node. This is useful if the workload needs to access other service(s)/workload(s) using kubernetes internal DNS.\"\n" + }, + { + "value": "ClusterFirstWithHostNet", + "description": "For Pods running with hostNetwork and wanting to prioritise internal kubernetes DNS should make use of this policy." + }, + { + "value": "None", + "description": "Ignore DNS settings from the Kubernetes cluster" + } + ] + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Networking", + "description": "Specify custom DNS configuration which will be applied to the pod", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "nameservers", + "label": "Nameservers", + "schema": { + "default": [], + "type": "list", + "items": [ + { + "variable": "nameserver", + "label": "Nameserver", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "searches", + "label": "Searches", + "schema": { + "default": [], + "type": "list", + "items": [ + { + "variable": "search", + "label": "Search Entry", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "hostNetwork", + "label": "Provide access to node network namespace for the workload", + "group": "Networking", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "externalInterfaces", + "=", + [] + ] + ] + } + }, + { + "variable": "hostPortsList", + "label": "Specify host ports for the workload", + "description": "Only use host ports if scaling of a workload is not required", + "group": "Networking", + "schema": { + "show_if": [ + [ + "updateStrategy", + "=", + "Recreate" + ] + ], + "type": "list", + "hidden": true, + "items": [ + { + "variable": "hostPortConfiguration", + "label": "Host Port Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "containerPort", + "label": "Container Port", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "hostPort", + "label": "Host Port", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "portForwardingList", + "label": "Specify Node ports to forward to workload", + "group": "Port Forwarding", + "description": "Specify ports of node and workload to forward traffic from node port to workload port", + "schema": { + "type": "list", + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "items": [ + { + "variable": "portForwarding", + "label": "Port Forwarding Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "containerPort", + "label": "Container Port", + "schema": { + "type": "int", + "required": true + } + }, + { + "variable": "nodePort", + "label": "Node Port", + "schema": { + "type": "int", + "required": true, + "min": 9000, + "max": 65535 + } + }, + { + "variable": "protocol", + "label": "Protocol", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "TCP", + "description": "TCP Protocol" + }, + { + "value": "UDP", + "description": "UDP Protocol" + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "hostPathVolumes", + "label": "Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "hostPathConfiguration", + "label": "Host Path Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "required": true + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "Path where host path will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "emptyDirVolumes", + "label": "Memory Backed Volumes", + "description": "Mount memory based temporary volumes for fast access i.e consuming /dev/shm", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "emptyDirVolume", + "label": "Memory Backed Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path", + "description": "Path where temporary path will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "sizeLimit", + "label": "Size Limit", + "description": "Optional - Size of the memory backed volume.
\nFormat: 100Mi, 1Gi, 2Gi etc\n", + "schema": { + "type": "string", + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "512Mi" + } + } + ] + } + } + ] + } + }, + { + "variable": "volumes", + "label": "Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "volume", + "label": "Volume", + "schema": { + "type": "dict", + "$ref": [ + "normalize/ixVolume" + ], + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "livenessProbe", + "label": "Liveness Probe", + "description": "Configure Liveness Probe", + "group": "Health Check", + "schema": { + "hidden": true, + "type": "dict", + "default": null, + "null": true, + "attrs": [ + { + "variable": "command", + "label": "Liveness command", + "description": "Specify a command to determine liveness of pod", + "schema": { + "type": "list", + "required": true, + "items": [ + { + "variable": "commandArg", + "label": "Command Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "initialDelaySeconds", + "label": "Seconds Delay", + "description": "Seconds to delay the first liveness probe", + "schema": { + "type": "int", + "default": 5 + } + }, + { + "variable": "periodSeconds", + "label": "Period Seconds", + "description": "Specify number of seconds to run liveness probe", + "schema": { + "type": "int", + "default": 10 + } + } + ] + } + }, + { + "variable": "gpuConfiguration", + "label": "GPU Configuration", + "group": "Resource Reservation", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + }, + { + "variable": "tty", + "label": "Enable TTY", + "description": "Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled.", + "group": "Workload Details", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "stdin", + "label": "Enable STDIN", + "description": "Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled.", + "group": "Workload Details", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "securityContext", + "label": "Security Context", + "group": "Workload Details", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "privileged", + "label": "Privileged Mode", + "description": "Determines if any container in a pod can enable privileged mode. By default a container is not allowed to access any devices on the host, but a 'privileged' container is given access to all devices on the host. This allows the container nearly all the same access as processes running on the host.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "capabilities", + "label": "Capabilities", + "description": "With Linux capabilities, you can grant certain privileges to a process without granting all the privileges of the root user.", + "schema": { + "type": "list", + "items": [ + { + "variable": "capability", + "description": "Add Capability", + "label": "Add Capability", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "enableRunAsUser", + "label": "Configure Container User and Group ID", + "description": "Configure security context runAsUser and runAsGroup variables", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "runAsUser", + "label": "Run Container As User", + "description": "Configure user id for container.", + "schema": { + "type": "int", + "default": 568 + } + }, + { + "variable": "runAsGroup", + "label": "Run Container As Group", + "description": "Configure group id for container.", + "schema": { + "type": "int", + "default": 568 + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

iX-Chart

\n

iX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.\nIt provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.

", + "detailed_readme": "

iX Chart

\n

iX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.\nIt provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.

\n

This chart will deploy a docker image as a kubernetes workload allowing user to configure the workload deployment / management.

\n

Introduction

\n

iX-chart is designed for simple single docker image deployments.

\n

Configuration

\n

The following table lists the configurable parameters of the iX chart and\ntheir default values.

\n

| Parameter | Description | Default |\n|:-------------------------------|:----------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------|\n| workloadType | Specify type of workload to deploy | Deployment |\n| cronSchedule | Specify schedule for cronjob if workloadType is CronJob. | {\"minute\": \"5\", \"hour\": \"*\", \"dom\": \"*\", \"month\": \"*\", \"dow\": \"*\"} |\n| image.repository | The image repository to pull from | debian |\n| image.tag | The image tag to pull from | latest |\n| image.pullPolicy | Image pull policy | IfNotPresent |\n| updateStrategy | Upgrade Policy | RollingUpdate |\n| jobRestartPolicy | Restart Policy for job type workload ( only applicable if workloadType is Job/CronJob | OnFailure |\n| containerCommand | Commands to execute inside container overriding image CMD default | null |\n| containerArgs | Specify arguments for container command | null |\n| containerEnvironmentVariables| Container Environment Variables | null |\n| externalInterfaces | Add external interfaces in the pod | null |\n| dnsPolicy | Specify DNS Policy for pod | Default |\n| dnsConfig | Specify custom DNS configuration which will be applied to the pod | {\"nameservers\": [], \"searches\": []} |\n| hostNetwork | Use host network for workload ( similar to docker host networking ) | false |\n| hostPortsList | Specify ports of host and workload to forward traffic from host port to workload port. | null |\n| portForwardingList | Specify ports of node and workload to forward traffic from node port to workload port | null |\n| hostPathVolumes | Specify host paths to be used as hostpath volumes for the workload | null |\n| volumes | Specify ix_volumes | null |\n| livenessProbe | Configure Liveness Probe for workload | null |\n| gpuConfiguration | Allocate GPU to workload ( if available ) | {} |

\n

Persistence

\n

Chart release iX chart offers 2 ways to have persistent storage:

\n

1) hostPathVolumes\n2) volumes

\n

For (1), they are kubernetes host path volumes which the user can assign to the workload with RO/RW permissions.

\n

(2) is a host path volume as well but it operates differently then (1) in terms of where it lives and how it's lifecycle is tied to the chart release.\nFor (2), users specify where they would like persistent storage in the workload and a dataset name ( it should be unique per each chart release ), based on this input,\nsystem will create a dataset and then use it as a host path volume for the workload. During upgrades, snapshot will be taken for these volumes and on rollback users can subsequently\nrestore the snapshots hence the data.\nWhen a chart release will be deleted, all (2) volumes data will be deleted unlike (1) ( until of course they are not in the chart release's dataset path ).

\n

Recommended Persistence Configuration Examples

\n

The following is a recommended configuration example for creating ix volumes

\n

```\n\"volumes\": [\n {\n \"datasetName\": \"ix_volume1\",\n \"mountPath\": \"/mount_test1\"\n },\n {\n \"datasetName\": \"ix_volume2\",\n \"mountPath\": \"/mount_test2\"\n }\n]

\n

```

\n

mountPath refers to the path inside the pod.

\n
\n

The following is a recommended configuration example for hostPathVolumes

\n

\"hostPathVolumes\": [\n {\n \"hostPath\": \"/mnt/pool/test_dir\",\n \"mountPath\": \"/test_dir\",\n \"readOnly\": true\n },\n {\n \"hostPath\": \"/mnt/pool/test_file\",\n \"mountPath\": \"/test_file\",\n \"readOnly\": true\n }\n]

\n

External Interfaces Configuration Examples

\n

\"externalInterfaces\": [\n {\n \"hostInterface\": \"ens3\",\n \"ipam\": {\"type\": \"dhcp\"}\n },\n {\n \"hostInterface\": \"br0\",\n \"ipam\": {\n \"type\": \"static\",\n \"staticIPConfigurations\": [\"192.168.0.120/24\"],\n \"staticRoutes\": [\n {\"destination\": \"0.0.0.0/0\", \"gateway\": \"192.168.0.1\"}\n ]\n }\n }\n]

\n

The first entry in the above configuration example will add an external interface in the pod using macvlan with ipam being set to dhcp.\nSecond entry will add an external interface in the pod using bridge and using static IP configuration for the external interface.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/minio/app_versions.json b/charts/minio/app_versions.json new file mode 100644 index 0000000000..c947cf4ecb --- /dev/null +++ b/charts/minio/app_versions.json @@ -0,0 +1,668 @@ +{ + "1.7.20": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/minio/1.7.20", + "last_update": "2023-11-02 14:04:59", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "2023-03-13_1.7.20", + "version": "1.7.20", + "chart_metadata": { + "name": "minio", + "description": "High Performance, Kubernetes Native Object Storage", + "annotations": { + "title": "MinIO" + }, + "type": "application", + "version": "1.7.20", + "apiVersion": "v2", + "appVersion": "2023-03-13", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://min.io", + "icon": "https://media.sys.truenas.net/apps/minio/icons/icon.png", + "sources": [ + "https://github.com/minio/minio", + "https://github.com/minio/charts" + ], + "keywords": [ + "storage", + "object-storage", + "S3" + ] + }, + "app_metadata": null, + "schema": { + "groups": [ + { + "name": "Container Images", + "description": "Image to be used for container" + }, + { + "name": "Workload Configuration", + "description": "Configure workload deployment" + }, + { + "name": "Minio Configuration", + "description": "Configure Minio credentials" + }, + { + "name": "Storage", + "description": "Configure Storage for Nextcloud" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_minio-config_protocol" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-service.consolePort" + ] + } + }, + "questions": [ + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "updateStrategy", + "label": "Minio update strategy", + "group": "Workload Configuration", + "schema": { + "type": "string", + "default": "RollingUpdate", + "enum": [ + { + "value": "RollingUpdate", + "description": "Create new pods and then kill old ones" + }, + { + "value": "Recreate", + "description": "Kill existing pods before creating new ones" + } + ] + } + }, + { + "variable": "distributedMode", + "label": "Enable Distributed Mode", + "description": "Run Minio instance to connect to a distributed minio cluster", + "group": "Minio Configuration", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "distributedIps", + "label": "Distributed Minio Instance URI(s)", + "schema": { + "type": "list", + "required": true, + "default": [], + "items": [ + { + "variable": "ip", + "label": "Distributed Minio Instance URI", + "schema": { + "type": "string", + "empty": false + } + } + ] + } + } + ] + } + }, + { + "variable": "extraArgs", + "label": "Minio Extra Arguments", + "group": "Minio Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Argument", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "accessKey", + "label": "Root User", + "group": "Minio Configuration", + "description": "Enter the S3 Root User", + "schema": { + "type": "string", + "private": true, + "required": true, + "min_length": 5, + "max_length": 20 + } + }, + { + "variable": "secretKey", + "label": "Root Password", + "group": "Minio Configuration", + "description": "Enter the S3 Root Password", + "schema": { + "type": "string", + "private": true, + "required": true, + "min_length": 8, + "max_length": 40 + } + }, + { + "variable": "environmentVariables", + "label": "Minio image environment", + "group": "Minio Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "service", + "description": "Minio Service Configuration", + "label": "Minio Service Configuration", + "group": "Minio Configuration", + "schema": { + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "nodePort", + "label": "Node Port to use for Minio API", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 9000, + "required": true + } + }, + { + "variable": "consolePort", + "label": "Node Port to use for Minio UI Access", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 9002, + "required": true + } + } + ] + } + }, + { + "variable": "certificate", + "description": "Minio Certificate", + "label": "Minio Certificate", + "group": "Minio Configuration", + "schema": { + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + }, + { + "variable": "minioDomain", + "label": "Minio Domain Name", + "description": "This is only required if TLS is configured for Minio", + "group": "Minio Configuration", + "schema": { + "type": "string", + "default": null, + "null": true, + "show_if": [ + [ + "certificate", + "!=", + null + ] + ] + } + }, + { + "variable": "logsearchapi", + "label": "Log Search API Configuration", + "description": "Log Search API Configuration", + "group": "Minio Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Log Search API", + "description": "Enables Log Search API and configures MinIO to use it. It also deploys a postgres DB for it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "diskCapacityGB", + "label": "Disk Capacity in GB", + "description": "Capacity in GB that logs are allowed to occupy.", + "schema": { + "type": "int", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": 5 + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Minio Storage", + "group": "Storage", + "schema": { + "type": "dict", + "show_if": [ + [ + "distributedMode", + "=", + false + ] + ], + "attrs": [ + { + "variable": "export", + "label": "Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Minio Data Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-minio", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Minio Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "default": "/export", + "immutable": true + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Minio Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Minio Data Volume", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Minio application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "postgresAppVolumeMounts", + "label": "Postgres Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "postgres-data", + "label": "Postgres Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Data Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_data", + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/lib/postgresql/data" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Postgres Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Postgres Data Volume", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true + } + } + ] + } + } + ] + } + }, + { + "variable": "postgres-backup", + "label": "Postgres Backup Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Backup Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_backups", + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Backup Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/postgres_backups" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Postgres Backup Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Postgres Backup Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

MinIO is a High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.

\n

NOTE\n- On installation, minIO data directory's ownership will be updated to minio:minio.\n- For existing installations that are exhibiting the upgrade to >=1.5.0, the minIO data directory's ownership will be migrated to minio:minio.

", + "detailed_readme": "

MinIO

\n

MinIO is a High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.

\n

MinIO supports distributed mode. In distributed mode, you can pool multiple drives (even on different machines) into a single object storage server.

\n

For more detailed documentation please visit here

\n

Introduction

\n

This chart bootstraps MinIO deployment on a Kubernetes cluster using the Helm package manager.

\n

Configuration

\n

The following table lists the configurable parameters of the MinIO chart and their default values.

\n

| Parameter | Description | Default |\n|:-------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------|\n| image.repository | Image repository | minio/minio |\n| image.tag | MinIO image tag. Possible values listed here. | RELEASE.2020-11-06T23-17-07Z |\n| image.pullPolicy | Image pull policy | IfNotPresent |\n| extraArgs | Additional command line arguments to pass to the MinIO server | [] |\n| accessKey | Default access key (5 to 20 characters) | random 20 chars |\n| secretKey | Default secret key (8 to 40 characters) | random 40 chars |\n| persistence.enabled | Use persistent volume to store data | true |\n| persistence.size | Size of persistent volume claim | 500Gi |\n| persistence.existingClaim | Use an existing PVC to persist data | nil |\n| persistence.storageClass | Storage class name of PVC | nil |\n| persistence.accessMode | ReadWriteOnce or ReadOnly | ReadWriteOnce |\n| persistence.subPath | Mount a sub directory of the persistent volume if set | \"\" |\n| environment | Set MinIO server relevant environment variables in values.yaml file. MinIO containers will be passed these variables when they start. | MINIO_STORAGE_CLASS_STANDARD: EC:4\" |

\n

Some parameters above map to the env variables defined in the MinIO DockerHub image.

\n

Pass environment variables to MinIO containers

\n

To pass environment variables to MinIO containers when deploying via Helm chart, use the below command line format

\n

bash\n$ helm install --set environment.MINIO_BROWSER=on,environment.MINIO_DOMAIN=domain-name minio/minio

\n

You can add as many environment variables as required, using the above format. Just add environment.<VARIABLE_NAME>=<value> under set flag.

\n

NOTE\n- On fresh installation, minIO data directory's ownership will be updated to minio:minio.\n- For existing installations that are exhibiting the upgrade to >=1.5.0, the minIO data directory's ownership will be migrated to minio:minio.

", + "changelog": "

Change Log

\n

This contains all the notable changes to the MinIO application.

\n

[1.5.0]

\n
    \n
  1. On fresh installation, minIO data directory's ownership will be updated to minio:minio.
  2. \n
  3. For existing installations that are exhibiting the upgrade, the minIO data directory's ownership will be migrated to minio:minio.
  4. \n
\n

[1.6.2]

\n
    \n
  1. Users with existing instances are advised to not update to the newer version.\n MinIO released a major version change with no backwards compatibility.\n In order to use newer versions of MinIO, a manual migration is needed.\n For more information, visit https://min.io/docs/minio/linux/operations/install-deploy-manage/migrate-fs-gateway.html
  2. \n
" + } +} \ No newline at end of file diff --git a/charts/netdata/app_versions.json b/charts/netdata/app_versions.json new file mode 100644 index 0000000000..d15a53e9f9 --- /dev/null +++ b/charts/netdata/app_versions.json @@ -0,0 +1,562 @@ +{ + "1.0.37": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/netdata/1.0.37", + "last_update": "2023-10-31 12:13:07", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "v1.43.2_1.0.37", + "version": "1.0.37", + "chart_metadata": { + "name": "netdata", + "description": "Real-time performance monitoring, done right!", + "annotations": { + "title": "Netdata" + }, + "type": "application", + "version": "1.0.37", + "apiVersion": "v2", + "appVersion": "v1.43.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://www.netdata.cloud/", + "icon": "https://media.sys.truenas.net/apps/netdata/icons/icon.png", + "sources": [ + "https://github.com/netdata/helmchart", + "https://github.com/netdata/netdata" + ], + "keywords": [ + "alerting", + "metric", + "monitoring" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Netdata runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Netdata is able to chown files." + }, + { + "name": "FOWNER", + "description": "Netdata is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Netdata is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Netdata is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Netdata is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Netdata is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Netdata is able to kill processes." + }, + { + "name": "SETGID", + "description": "Netdata is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Netdata is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Netdata is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Netdata is able to bind to privileged ports." + }, + { + "name": "NET_RAW", + "description": "Netdata is able to use raw sockets." + }, + { + "name": "SETFCAP", + "description": "Netdata is able to set file capabilities." + }, + { + "name": "PTRACE", + "description": "Netdata is able to trace processes." + }, + { + "name": "AUDIT_WRITE", + "description": "Netdata is able to write to audit log." + } + ], + "hostMounts": [ + { + "hostPath": "/etc/os-release", + "description": "Required to read the OS release information." + }, + { + "hostPath": "/etc/passwd", + "description": "Required to read the user information." + }, + { + "hostPath": "/etc/group", + "description": "Required to read the group information." + }, + { + "hostPath": "/proc", + "description": "Required to read the processes information." + } + ] + }, + "schema": { + "groups": [ + { + "name": "Container Images", + "description": "Image to be used for container" + }, + { + "name": "Workload Configuration", + "description": "Configure workload deployment" + }, + { + "name": "Netdata Configuration", + "description": "Configure Netdata credentials" + }, + { + "name": "Storage", + "description": "Configure Storage for Netdata" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-service.nodePort" + ] + } + }, + "questions": [ + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "environmentVariables", + "label": "Netdata image environment", + "group": "Netdata Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "service", + "description": "Netdata Service Configuration", + "label": "Netdata Service Configuration", + "group": "Netdata Configuration", + "schema": { + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "nodePort", + "label": "Node Port to use for Netdata UI", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 20489, + "required": true + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Netdata Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "netdataconfig", + "label": "Configuration Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-config", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/etc/netdata" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Netdata Configuration Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Netdata Configuration Volume", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true + } + } + ] + } + } + ] + } + }, + { + "variable": "netdatacache", + "label": "Cache Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Cache Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-cache", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Cache Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/cache/netdata" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Netdata Cache Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Netdata Cache Volume", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true + } + } + ] + } + } + ] + } + }, + { + "variable": "netdatalib", + "label": "Netdata Library Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Netdata Library Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-lib", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Netdata Library Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/lib/netdata" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Netdata Library Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Netdata Library Volume", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Netdata application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Netdata is a fast, easy monitoring and troubleshooting system.

", + "detailed_readme": "

Netdata

\n

Netdata is a fast, easy monitoring and troubleshooting system.

\n

Introduction

\n

This chart bootstraps Netdata deployment on a Kubernetes cluster using the Helm package manager.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/nextcloud/app_versions.json b/charts/nextcloud/app_versions.json new file mode 100644 index 0000000000..b7385404f5 --- /dev/null +++ b/charts/nextcloud/app_versions.json @@ -0,0 +1,1539 @@ +{ + "1.6.52": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/nextcloud/1.6.52", + "last_update": "2023-10-28 12:28:58", + "required_features": [ + "normalize/ixVolume", + "definitions/nodeIP", + "definitions/certificate" + ], + "human_version": "27.1.3_1.6.52", + "version": "1.6.52", + "chart_metadata": { + "name": "nextcloud", + "description": "A file sharing server that puts the control and security of your own data back into your hands.", + "annotations": { + "title": "Nextcloud" + }, + "type": "application", + "version": "1.6.52", + "apiVersion": "v2", + "appVersion": "27.1.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://nextcloud.com/", + "icon": "https://media.sys.truenas.net/apps/nextcloud/icons/icon.svg", + "sources": [ + "https://github.com/nextcloud/docker", + "https://github.com/nextcloud/helm", + "https://github.com/truenas/charts/tree/master/charts/nextcloud" + ], + "keywords": [ + "nextcloud", + "storage", + "http", + "web", + "php" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Nextcloud runs as root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Postgres runs as root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Nginx runs as root user. (Nginx only runs when certificate is provided)" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Nextcloud, Nginx and Postgres are able to chown files." + }, + { + "name": "FOWNER", + "description": "Nextcloud, Nginx and Postgres are able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Nextcloud, Nginx and Postgres are able to use chroot." + }, + { + "name": "MKNOD", + "description": "Nextcloud, Nginx and Postgres are able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Nextcloud, Nginx and Postgres are able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Nextcloud, Nginx and Postgres are able to set file capabilities." + }, + { + "name": "KILL", + "description": "Nextcloud, Nginx and Postgres are able to kill processes." + }, + { + "name": "SETGID", + "description": "Nextcloud, Nginx and Postgres are able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Nextcloud, Nginx and Postgres are able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Nextcloud, Nginx and Postgres are able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Nextcloud, Nginx and Postgres are able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Nextcloud, Nginx and Postgres are able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Nextcloud, Nginx and Postgres are able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Nextcloud, Nginx and Postgres are able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Container Images", + "description": "Image to be used for container" + }, + { + "name": "Nextcloud Configuration", + "description": "Configuration details for Nextcloud workload" + }, + { + "name": "Storage", + "description": "Configure Storage for Nextcloud" + }, + { + "name": "Container Configuration", + "description": "Configure nextcloud container parameters" + }, + { + "name": "Postgresql Configuration", + "description": "Configure Postgresql for nextcloud" + }, + { + "name": "CronJob configuration", + "description": "Configure CronJob for nextcloud" + }, + { + "name": "Scaling/Upgrade Policy", + "description": "Configure how pods are replaced when configuration is upgraded" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_nginx-configuration_protocol" + ], + "host": [ + "$variable-nextcloud.host" + ], + "ports": [ + "$variable-service.nodePort" + ] + } + }, + "questions": [ + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certificate", + "description": "Configure Certificate for Nextcloud", + "label": "Certificate Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + }, + { + "variable": "nginxConfig", + "description": "Configure Nginx for Nextcloud", + "label": "Nginx Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "dict", + "show_if": [ + [ + "certificate", + "!=", + null + ] + ], + "attrs": [ + { + "variable": "proxy_timeouts", + "label": "Proxy timeouts (Seconds)", + "description": "Applies the timeout to the following settings:
\n- proxy_connect_timeout
\n- proxy_send_timeout
\n- proxy_read_timeout
\n", + "schema": { + "type": "int", + "min": 30, + "default": 60, + "required": true + } + }, + { + "variable": "useDifferentAccessPort", + "label": "Use different port for URL rewrites", + "description": "If enabled, the URL rewrite will use [Access Port] defined below instead of the [Node Port].
\nNote that Nextcloud will still listen on the [Node Port]. (Default 9001)\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "externalAccessPort", + "label": "External Access Port", + "schema": { + "type": "int", + "show_if": [ + [ + "useDifferentAccessPort", + "=", + true + ] + ], + "min": 443, + "max": 65535, + "default": 443, + "required": true + } + } + ] + } + }, + { + "variable": "nextcloud", + "description": "Nextcloud configuration details", + "label": "Nextcloud Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "dict", + "required": true, + "additional_attrs": true, + "attrs": [ + { + "variable": "host", + "description": "Nextcloud host to create application URLs", + "label": "Nextcloud host", + "schema": { + "type": "string", + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + }, + { + "variable": "username", + "label": "Username", + "description": "Name of the Nextcloud admin user", + "schema": { + "type": "string", + "default": "admin", + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "Password for the Nextcloud admin user", + "schema": { + "type": "string", + "private": true, + "default": "changeme", + "required": true + } + }, + { + "variable": "datadir", + "label": "Nextcloud data directory", + "description": "Configures the data directory where nextcloud stores all files from the users", + "schema": { + "type": "path", + "default": "/var/www/html/data", + "required": true + } + }, + { + "variable": "install_ffmpeg", + "label": "Install ffmpeg", + "description": "Automatically Install ffmpeg when the container starts", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "install_smbclient", + "label": "Install smbclient", + "description": "Automatically Install smbclient when the container starts", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "max_upload_size", + "label": "Max Upload Size (Giga Bytes)", + "description": "Applies the timeout to the following settings:
\n- client_max_body_size in nginx
\n- post_max_size and upload_max_filesize in php
\n", + "schema": { + "type": "int", + "default": 3, + "min": 1, + "required": true + } + }, + { + "variable": "max_execution_time", + "label": "Max Execution Time (Seconds)", + "description": "Configures the max execution time of php", + "schema": { + "type": "int", + "default": 30, + "min": 30, + "required": true + } + }, + { + "variable": "php_memory_limit", + "label": "PHP Memory Limit (Mega Bytes)", + "description": "Configures the memory limit of php", + "schema": { + "type": "int", + "default": 512, + "min": 128, + "max": 4096, + "required": true + } + }, + { + "variable": "opcache_memory_consumption", + "label": "Opcache Memory Consumption (Mega Bytes)", + "description": "Configures the memory consumption of the opcache", + "schema": { + "type": "int", + "min": 128, + "max": 1024, + "default": 128, + "required": true + } + } + ] + } + }, + { + "variable": "cronjob", + "description": "Setup cronjob for nextcloud", + "label": "Setup cronjob for nextcloud", + "group": "CronJob configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable cronjobs for nextcloud", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "schedule", + "label": "Schedule", + "schema": { + "type": "string", + "default": "*/15 * * * *", + "empty": false + } + } + ] + } + } + ] + } + }, + { + "variable": "updateStrategy", + "description": "Upgrade Policy", + "label": "Update Strategy", + "group": "Scaling/Upgrade Policy", + "schema": { + "type": "string", + "default": "Recreate", + "enum": [ + { + "value": "RollingUpdate", + "description": "Create new pods and then kill old ones" + }, + { + "value": "Recreate", + "description": "Kill existing pods before creating new ones" + } + ] + } + }, + { + "variable": "service", + "description": "Nextcloud Service Configuration", + "label": "Nextcloud Service Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "nodePort", + "label": "Node Port to use for Nextcloud", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 9001, + "required": true + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Nextcloud Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "nextcloud-data", + "label": "Nextcloud Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Nextcloud Data Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-nextcloud_data", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Nextcloud Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/www" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Nextcloud Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Nextcloud Data Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Nextcloud Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Nextcloud Host Path Volume", + "description": "Add an extra host path volume for nextcloud application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "postgresAppVolumeMounts", + "label": "Postgres Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "postgres-data", + "label": "Postgres Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Data Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_data", + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/lib/postgresql/data" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Postgres Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Postgres Data Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "postgres-backup", + "label": "Postgres Backup Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Backup Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_backups", + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Backup Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/postgres_backups" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Postgres Backup Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Postgres Backup Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + }, + { + "variable": "environmentVariables", + "label": "Nextcloud environment", + "group": "Nextcloud Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

nextcloud

\n

nextcloud is a file sharing server that puts the control and security of your own data back into your hands.

", + "detailed_readme": "

nextcloud

\n

nextcloud is a file sharing server that puts the control and security of your own data back into your hands.

\n

Introduction

\n

This chart bootstraps an nextcloud deployment on a Kubernetes cluster using the Helm package manager.

\n

Configuration

\n

Please refer to questions.yaml for a detailed overview on supported configurable values.

", + "changelog": null + }, + "1.6.29": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/nextcloud/1.6.29", + "last_update": "2023-10-06 13:44:43", + "required_features": [ + "normalize/ixVolume", + "definitions/nodeIP", + "definitions/certificate" + ], + "human_version": "26.0.2_1.6.29", + "version": "1.6.29", + "chart_metadata": { + "name": "nextcloud", + "description": "A file sharing server that puts the control and security of your own data back into your hands.", + "annotations": { + "title": "Nextcloud" + }, + "type": "application", + "version": "1.6.29", + "apiVersion": "v2", + "appVersion": "26.0.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://nextcloud.com/", + "icon": "https://cdn.rawgit.com/docker-library/docs/defa5ffc7123177acd60ddef6e16bddf694cc35f/nextcloud/logo.svg", + "sources": [ + "https://github.com/nextcloud/docker", + "https://github.com/nextcloud/helm", + "https://github.com/truenas/charts/tree/master/library/ix-dev/charts/nextcloud" + ], + "keywords": [ + "nextcloud", + "storage", + "http", + "web", + "php" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Nextcloud runs as root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Postgres runs as root user." + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Nginx runs as root user. (Nginx only runs when certificate is provided)" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Nextcloud, Nginx and Postgres are able to chown files." + }, + { + "name": "FOWNER", + "description": "Nextcloud, Nginx and Postgres are able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Nextcloud, Nginx and Postgres are able to use chroot." + }, + { + "name": "MKNOD", + "description": "Nextcloud, Nginx and Postgres are able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Nextcloud, Nginx and Postgres are able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Nextcloud, Nginx and Postgres are able to set file capabilities." + }, + { + "name": "KILL", + "description": "Nextcloud, Nginx and Postgres are able to kill processes." + }, + { + "name": "SETGID", + "description": "Nextcloud, Nginx and Postgres are able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Nextcloud, Nginx and Postgres are able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Nextcloud, Nginx and Postgres are able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Nextcloud, Nginx and Postgres are able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Nextcloud, Nginx and Postgres are able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Nextcloud, Nginx and Postgres are able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Nextcloud, Nginx and Postgres are able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Container Images", + "description": "Image to be used for container" + }, + { + "name": "Nextcloud Configuration", + "description": "Configuration details for Nextcloud workload" + }, + { + "name": "Storage", + "description": "Configure Storage for Nextcloud" + }, + { + "name": "Container Configuration", + "description": "Configure nextcloud container parameters" + }, + { + "name": "Postgresql Configuration", + "description": "Configure Postgresql for nextcloud" + }, + { + "name": "CronJob configuration", + "description": "Configure CronJob for nextcloud" + }, + { + "name": "Scaling/Upgrade Policy", + "description": "Configure how pods are replaced when configuration is upgraded" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_nginx-configuration_protocol" + ], + "host": [ + "$variable-nextcloud.host" + ], + "ports": [ + "$variable-service.nodePort" + ] + } + }, + "questions": [ + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certificate", + "description": "Configure Certificate for Nextcloud", + "label": "Certificate Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + }, + { + "variable": "nextcloud", + "description": "Nextcloud configuration details", + "label": "Nextcloud Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "dict", + "required": true, + "additional_attrs": true, + "attrs": [ + { + "variable": "host", + "description": "Nextcloud host to create application URLs", + "label": "Nextcloud host", + "schema": { + "type": "string", + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + }, + { + "variable": "username", + "label": "Username", + "description": "Name of the Nextcloud admin user", + "schema": { + "type": "string", + "default": "admin", + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "Password for the Nextcloud admin user", + "schema": { + "type": "string", + "private": true, + "default": "changeme", + "required": true + } + }, + { + "variable": "datadir", + "label": "Nextcloud data directory", + "description": "Configures the data directory where nextcloud stores all files from the users", + "schema": { + "type": "path", + "default": "/var/www/html/data", + "required": true + } + }, + { + "variable": "install_ffmpeg", + "label": "Install ffmpeg", + "description": "Automatically Install ffmpeg when the container starts", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "cronjob", + "description": "Setup cronjob for nextcloud", + "label": "Setup cronjob for nextcloud", + "group": "CronJob configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable cronjobs for nextcloud", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "schedule", + "label": "Schedule", + "schema": { + "type": "string", + "default": "1 */24 * * *", + "empty": false + } + } + ] + } + } + ] + } + }, + { + "variable": "updateStrategy", + "description": "Upgrade Policy", + "label": "Update Strategy", + "group": "Scaling/Upgrade Policy", + "schema": { + "type": "string", + "default": "Recreate", + "enum": [ + { + "value": "RollingUpdate", + "description": "Create new pods and then kill old ones" + }, + { + "value": "Recreate", + "description": "Kill existing pods before creating new ones" + } + ] + } + }, + { + "variable": "service", + "description": "Nextcloud Service Configuration", + "label": "Nextcloud Service Configuration", + "group": "Nextcloud Configuration", + "schema": { + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "nodePort", + "label": "Node Port to use for Nextcloud", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 9001, + "required": true + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Nextcloud Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "nextcloud-data", + "label": "Nextcloud Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Nextcloud Data Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-nextcloud_data", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Nextcloud Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/www" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Nextcloud Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Nextcloud Data Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Nextcloud Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Nextcloud Host Path Volume", + "description": "Add an extra host path volume for nextcloud application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "postgresAppVolumeMounts", + "label": "Postgres Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "postgres-data", + "label": "Postgres Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Data Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_data", + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/var/lib/postgresql/data" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Postgres Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Postgres Data Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "postgres-backup", + "label": "Postgres Backup Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Postgres Backup Volume Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "default": "ix-postgres_backups", + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Postgresql Backup Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/postgres_backups" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Postgres Backup Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Postgres Backup Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limresource limitsit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + }, + { + "variable": "environmentVariables", + "label": "Nextcloud environment", + "group": "Nextcloud Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

nextcloud

\n

nextcloud is a file sharing server that puts the control and security of your own data back into your hands.

", + "detailed_readme": "

nextcloud

\n

nextcloud is a file sharing server that puts the control and security of your own data back into your hands.

\n

Introduction

\n

This chart bootstraps an nextcloud deployment on a Kubernetes cluster using the Helm package manager.

\n

Configuration

\n

Please refer to questions.yaml for a detailed overview on supported configurable values.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/photoprism/app_versions.json b/charts/photoprism/app_versions.json new file mode 100644 index 0000000000..31f849c53a --- /dev/null +++ b/charts/photoprism/app_versions.json @@ -0,0 +1,593 @@ +{ + "1.0.32": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/photoprism/1.0.32", + "last_update": "2023-10-22 13:21:32", + "required_features": [ + "normalize/ixVolume", + "definitions/gpuConfiguration" + ], + "human_version": "231021_1.0.32", + "version": "1.0.32", + "chart_metadata": { + "name": "photoprism", + "description": "AI-powered app for browsing, organizing & sharing your photo collection.", + "annotations": { + "title": "PhotoPrism" + }, + "type": "application", + "version": "1.0.32", + "apiVersion": "v2", + "appVersion": "231021", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://photoprism.app/", + "icon": "https://media.sys.truenas.net/apps/photoprism/icons/icon.svg", + "sources": [ + "https://photoprism.app/", + "https://github.com/truenas/charts/tree/master/charts/photoprism" + ], + "keywords": [ + "media" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Photoprism runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Photoprism is able to chown files." + }, + { + "name": "FOWNER", + "description": "Photoprism is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Photoprism is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Photoprism is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Photoprism is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Photoprism is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Photoprism is able to kill processes." + }, + { + "name": "SETGID", + "description": "Photoprism is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Photoprism is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Photoprism is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Photoprism is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Photoprism is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Photoprism is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Photoprism is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "Photo Prism application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for photo prism" + }, + { + "name": "Networking", + "description": "Networking Configuration for photo prism" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Reservation", + "description": "Specify resources to be allocated to workload" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-web_port" + ], + "path": "/" + } + }, + "questions": [ + { + "variable": "web_port", + "label": "Web Port for photo prism", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 20800, + "required": true + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ownerUID", + "label": "Storage User ID", + "description": "User ID of the storage volume being used (application will chown the storage volume path with specified UID)", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "ownerGID", + "label": "Storage Group ID", + "description": "Group ID of the storage volume being used (application will chown the storage volume path with specified GID)", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "password", + "label": "Password", + "group": "Configuration", + "schema": { + "type": "string", + "private": true, + "required": true, + "empty": false, + "immutable": true, + "default": "admin123", + "show_if": [ + [ + "public", + "=", + false + ] + ] + } + }, + { + "variable": "public", + "label": "Enable Public Access", + "description": "Disable password authentication, WebDAV, and the advanced settings page", + "group": "Configuration", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "environmentVariables", + "label": "Photo Prism environment", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Photo Prism Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "original", + "label": "Storage Volume for Original Media", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Original Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-photoprism_original", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Original Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/photoprism/originals" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Photo Prism Original Storage Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Photo Prism Original Storage Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "storage", + "label": "Storage Volume for sidecar/cache/database", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-photoprism_storage", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/photoprism/storage" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Photo Prism Storage Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Photo Prism Storage Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "import", + "label": "Storage Volume for imports", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Import Storage Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-photoprism_import", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Storage Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/photoprism/import" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Photo Prism Import Storage Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Photo Prism Import Storage Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Photo Prism application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "gpuConfiguration", + "label": "GPU Configuration", + "group": "Resource Reservation", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Photo Prism

\n

PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection.

", + "detailed_readme": "

Photo Prism

\n

PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/pihole/app_versions.json b/charts/pihole/app_versions.json new file mode 100644 index 0000000000..d8214cf533 --- /dev/null +++ b/charts/pihole/app_versions.json @@ -0,0 +1,570 @@ +{ + "1.0.23": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/pihole/1.0.23", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2023.02.2_1.0.23", + "version": "1.0.23", + "chart_metadata": { + "name": "pihole", + "description": "DNS and Ad-filtering for your network.", + "annotations": { + "title": "Pi-hole" + }, + "type": "application", + "version": "1.0.23", + "apiVersion": "v2", + "appVersion": "2023.02.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://pi-hole.net/", + "icon": "https://media.sys.truenas.net/apps/pihole/icons/icon.png", + "sources": [ + "https://pi-hole.net/", + "https://github.com/truenas/charts/tree/master/charts/pihole" + ], + "keywords": [ + "networking", + "dns" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Pi-hole runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Pi-hole is able to chown files." + }, + { + "name": "FOWNER", + "description": "Pi-hole is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Pi-hole is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Pi-hole is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Pi-hole is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Pi-hole is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Pi-hole is able to kill processes." + }, + { + "name": "SETGID", + "description": "Pi-hole is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Pi-hole is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Pi-hole is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Pi-hole is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Pi-hole is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Pi-hole is able to use raw sockets." + }, + { + "name": "NET_ADMIN", + "description": "Pi-hole is able to perform various network-related operations." + }, + { + "name": "AUDIT_WRITE", + "description": "Pi-hole is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "Pihole application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for pihole" + }, + { + "name": "Networking", + "description": "Networking Configuration for pihole" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-web_port" + ], + "path": "/admin/" + } + }, + "questions": [ + { + "variable": "web_port", + "label": "Web Port for pihole", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 20720, + "required": true + } + }, + { + "variable": "dhcp", + "label": "Enable DHCP", + "group": "Networking", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "dhcp_start", + "label": "DHCP Start Address", + "group": "Networking", + "schema": { + "type": "ipaddr", + "cidr": false, + "required": true + } + }, + { + "variable": "dhcp_end", + "label": "DHCP End Address", + "group": "Networking", + "schema": { + "type": "ipaddr", + "cidr": false, + "required": true + } + }, + { + "variable": "dhcp_gateway", + "label": "Gateway", + "group": "Networking", + "schema": { + "type": "ipaddr", + "cidr": false, + "required": true + } + } + ] + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ownerUID", + "label": "Storage User ID", + "description": "User ID of the dnsmasq volume being used (application will chown the volume path with specified UID)", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "ownerGID", + "label": "Storage Group ID", + "description": "Group ID of the dnsmasq volume being used (application will chown the volume path with specified GID)", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "password", + "label": "Admin password", + "group": "Configuration", + "schema": { + "type": "string", + "private": true, + "required": true, + "empty": false, + "immutable": true + } + }, + { + "variable": "timezone", + "label": "Configure timezone", + "group": "Configuration", + "description": "Configure timezone for pihole", + "schema": { + "type": "string", + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ], + "default": "America/Los_Angeles" + } + }, + { + "variable": "environmentVariables", + "label": "Pihole environment", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Pihole Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Configuration Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-pihole_config", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/etc/pihole" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Pihole Configuration Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Pihole Configuration Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "dnsmasq", + "label": "DNSMASQ Volume for pihole", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "DNSMASQ Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-pihole_dnsmasq", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "DNSMASQ Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/etc/dnsmasq.d" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Pihole DNSMASQ Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Pihole DNSMASQ Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Pihole application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Pihole

\n

DNS and Ad-filtering for your network.

", + "detailed_readme": "

Pihole

\n

DNS and Ad-filtering for your network.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/plex/app_versions.json b/charts/plex/app_versions.json new file mode 100644 index 0000000000..2058e99937 --- /dev/null +++ b/charts/plex/app_versions.json @@ -0,0 +1,710 @@ +{ + "1.7.58": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/plex/1.7.58", + "last_update": "2023-10-31 12:13:07", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone", + "validations/lockedHostPath", + "definitions/gpuConfiguration" + ], + "human_version": "1.32.7.7621_1.7.58", + "version": "1.7.58", + "chart_metadata": { + "name": "plex", + "description": "Plex Media Server", + "annotations": { + "title": "Plex" + }, + "type": "application", + "version": "1.7.58", + "apiVersion": "v2", + "appVersion": "1.32.7.7621", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://plex.tv/", + "icon": "https://media.sys.truenas.net/apps/plex/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/plexinc/pms-docker/", + "https://github.com/k8s-at-home/charts/tree/master/charts/plex" + ], + "keywords": [ + "plex" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Plex runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Plex is able to chown files." + }, + { + "name": "FOWNER", + "description": "Plex is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Plex is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Plex is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Plex is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Plex is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Plex is able to kill processes." + }, + { + "name": "SETGID", + "description": "Plex is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Plex is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Plex is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Plex is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Plex is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Plex is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Plex is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Plex Configuration", + "description": "Configure plex deployment" + }, + { + "name": "Networking", + "description": "Configure networking for container" + }, + { + "name": "Storage", + "description": "Persist and share data that is separate from the lifecycle of the container" + }, + { + "name": "Workload Details", + "description": "Configure how workload should be deployed" + }, + { + "name": "Scaling/Upgrade Policy", + "description": "Configure how pods are replaced when configuration is upgraded" + }, + { + "name": "Restart Policy", + "description": "Configure when pod should be restarted in case of failure" + }, + { + "name": "Resource Reservation", + "description": "Specify resources to be allocated to workload" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-plexServiceTCP.port" + ], + "path": "/web" + } + }, + "questions": [ + { + "variable": "enablePlexPass", + "label": "Use PlexPass", + "group": "Plex Configuration", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "claimToken", + "label": "Plex Claim Token", + "group": "Plex Configuration", + "description": "The claim token for the server to obtain a real server token. If not provided, server is will not be automatically logged in. If server is already logged in, this parameter is ignored. You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "hostNetwork", + "label": "Configure Host Network", + "group": "Networking", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "environmentVariables", + "label": "Environment Variables for Plex", + "group": "Plex Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "timezone", + "label": "Plex container timezone", + "group": "Plex Configuration", + "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": "updateStrategy", + "description": "Upgrade Policy", + "label": "Update Strategy", + "group": "Scaling/Upgrade Policy", + "schema": { + "type": "string", + "default": "Recreate", + "enum": [ + { + "value": "RollingUpdate", + "description": "Create new pods and then kill old ones" + }, + { + "value": "Recreate", + "description": "Kill existing pods before creating new ones" + } + ] + } + }, + { + "variable": "plexServiceTCP", + "label": "Configure Plex TCP Service", + "group": "Networking", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port to expose for Plex UI", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 32400 + } + } + ] + } + }, + { + "variable": "gpuConfiguration", + "label": "GPU Configuration", + "group": "Resource Reservation", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + }, + { + "variable": "appVolumeMounts", + "label": "Plex Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "transcode", + "label": "Transcode Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Plex Transcode Volume Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-plex_transcode", + "hidden": true, + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Plex Transcode Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/transcode" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Plex Transcode Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Plex Transcode Volume", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "data", + "label": "Data Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Plex Data Volume Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-plex_data", + "editable": false, + "hidden": true + } + }, + { + "variable": "mountPath", + "label": "Plex Data Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/data" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Plex Data Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Plex Data Volume", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "config", + "label": "Config Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Plex Config Volume Name", + "schema": { + "type": "string", + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-plex_config", + "editable": false, + "hidden": true + } + }, + { + "variable": "mountPath", + "label": "Plex Config Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "hidden": true, + "default": "/config" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Host Path for Plex Config Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Plex Config Volume", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "shared", + "label": "Shared Volume", + "schema": { + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "emptyDir", + "label": "Temporary Volume", + "schema": { + "type": "boolean", + "default": true, + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Plex Shared Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "default": "/shared" + } + } + ] + } + }, + { + "variable": "shared-logs", + "label": "Shared Logs Volume", + "schema": { + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "emptyDir", + "label": "Temporary Volume", + "schema": { + "type": "boolean", + "default": true, + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Plex Shared Logs Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "editable": false, + "default": "/config/Library/Application Support/Plex Media Server/Logs" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Plex Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Plex Host Path Volume", + "description": "Add an extra host path volume for plex application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "description": "Mount hostpath in read-only mode", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Plex

\n

Plex chart is a chart designed to deploy plex in a TrueNAS SCALE kubernetes cluster.

", + "detailed_readme": "

Plex Media Server helm chart

\n

Configuration

\n

Please refer to questions.yaml for a detailed overview on supported configurable items.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/prometheus/app_versions.json b/charts/prometheus/app_versions.json new file mode 100644 index 0000000000..8824c022e5 --- /dev/null +++ b/charts/prometheus/app_versions.json @@ -0,0 +1,455 @@ +{ + "1.0.23": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/prometheus/1.0.23", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "v2.47.2_1.0.23", + "version": "1.0.23", + "chart_metadata": { + "name": "prometheus", + "description": "The Prometheus monitoring system and time series database.", + "annotations": { + "title": "Prometheus" + }, + "type": "application", + "version": "1.0.23", + "apiVersion": "v2", + "appVersion": "v2.47.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://prometheus.io", + "icon": "https://media.sys.truenas.net/apps/prometheus/icons/icon.png", + "sources": [ + "https://github.com/prometheus/prometheus", + "https://github.com/truenas/charts/tree/master/charts/prometheus", + "https://prometheus.io" + ], + "keywords": [ + "metrics", + "prometheus" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "prometheus", + "groupName": "prometheus", + "gid": 568, + "uid": 568, + "description": "Prometheus can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Prometheus Configuration", + "description": "Configure Prometheus" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Prometheus" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Prometheus" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Prometheus" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Prometheus" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "prometheusConfig", + "label": "", + "group": "Prometheus Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "retentionTime", + "label": "Retention Time", + "description": "The time to retain data for. Use the format 15d, 6w, 10y, etc.", + "schema": { + "type": "string", + "default": "15d", + "required": true + } + }, + { + "variable": "retentionSize", + "label": "Retention Size", + "description": "The size to retain data for. Use the format 100MB, 10GB, etc.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "walCompression", + "label": "WAL Compression", + "description": "Compress the time series database write-ahead log.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "additionalArgs", + "label": "Additional Arguments", + "description": "Configure additional arguments for Prometheus.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Argument", + "schema": { + "type": "string", + "required": true, + "default": "" + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Prometheus.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "prometheusRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Prometheus will run as.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Prometheus will run as.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "prometheusNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "apiPort", + "label": "API Port", + "description": "The port for the Prometheus API (And WebUI).", + "schema": { + "type": "int", + "default": 30002, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "prometheusStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Prometheus Data Storage", + "description": "The path to store Prometheus data/metrics.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "config", + "label": "Prometheus Config Storage", + "description": "The path to store Prometheus config storage.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Prometheus.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Prometheus.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Prometheus

\n

Prometheus - Monitoring system and time series database.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the prometheus directories.\nAfterward, the prometheus container will run as a non-root user (Default: 568).\nAlso an empty configuration file will be created.

\n
\n

The configuration file is located at /config/prometheus.yml inside the container.\nData is stored at /data inside the container.

", + "detailed_readme": "

Prometheus

\n

Prometheus - Monitoring system and time series database.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the prometheus directories.\nAfterward, the prometheus container will run as a non-root user (Default: 568).\nAlso an empty configuration file will be created.

\n
\n

The configuration file is located at /config/prometheus.yml inside the container.\nData is stored at /data inside the container.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/storj/app_versions.json b/charts/storj/app_versions.json new file mode 100644 index 0000000000..1bae6e11ef --- /dev/null +++ b/charts/storj/app_versions.json @@ -0,0 +1,570 @@ +{ + "1.0.16": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/storj/1.0.16", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "v1.68.2_1.0.16", + "version": "1.0.16", + "chart_metadata": { + "name": "storj", + "description": "Share your storage on the internet and earn.", + "annotations": { + "title": "Storj" + }, + "type": "application", + "version": "1.0.16", + "apiVersion": "v2", + "appVersion": "v1.68.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://www.storj.io", + "icon": "https://media.sys.truenas.net/apps/storj/icons/icon.svg", + "sources": [ + "https://www.storj.io", + "https://github.com/truenas/charts/tree/master/charts/storj" + ], + "keywords": [ + "storage", + "dapps", + "networking", + "financial" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Storj runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Storj is able to chown files." + }, + { + "name": "FOWNER", + "description": "Storj is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Storj is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Storj is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Storj is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Storj is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Storj is able to kill processes." + }, + { + "name": "SETGID", + "description": "Storj is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Storj is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Storj is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Storj is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Storj is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Storj is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Storj is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "Storj application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for storj" + }, + { + "name": "Networking", + "description": "Networking Configuration for storj" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-webPort" + ], + "path": "/" + } + }, + "questions": [ + { + "variable": "webPort", + "label": "Web Port for Storj", + "group": "Networking", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 20909, + "required": true + } + }, + { + "variable": "nodePort", + "label": "Node Port for Storj", + "description": "This port will be used for both TCP and UDP traffic.
\nNote that this port must be open on your firewall and that internal\nStorj port will not be affected by this change, but only the external (Node Port)\n", + "group": "Networking", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 28967, + "required": true + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "wallet", + "label": "Configure Wallet for Storj", + "group": "Configuration", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "authToken", + "label": "Configure Auth token for Storj Node", + "group": "Configuration", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "email", + "label": "Configure Email for Storj", + "group": "Configuration", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "domainAddress", + "label": "Add Your Storage Domain for Storj", + "group": "Configuration", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "zksync", + "label": "Opt-in to zkSync", + "description": "Appends --operator.wallet-features=zksync flag to the storagenode command", + "group": "Configuration", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "terminationGracePeriod", + "label": "Termination Grace Period", + "description": "Optional duration in seconds the pod needs to terminate gracefully.", + "group": "Configuration", + "schema": { + "type": "int", + "min": 30, + "default": 30 + } + }, + { + "variable": "storageSize", + "label": "Configure Storage Size You Want To Share in GB's", + "group": "Storage", + "schema": { + "type": "int", + "min": 500, + "default": 500 + } + }, + { + "variable": "runAsUser", + "label": "Owner User ID", + "group": "Configuration", + "schema": { + "immutable": true, + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "runAsGroup", + "label": "Owner Group ID", + "group": "Configuration", + "schema": { + "immutable": true, + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "environmentVariables", + "label": "Storj Extra Environment Variables", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Storj Configuration", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Configuration Data Volume to Share on Storj", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix_data", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Mount Path", + "description": "Path Where the Volume Will be Mounted Inside the Pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/app/config" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Storj Configuration Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Storj Configuration Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "identity", + "label": "Configure Identity Volume for Storage Node", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configure Storj Identity Volume to Allocate", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix_identity", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configure Storj Identity Volume to Allocate", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": false, + "default": "/app/identity" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Storj Identity Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Storj identity Volume", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for storj", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

storj

\n

storj share your extra storage and earn money

", + "detailed_readme": "

storj

\n

storj share your extra storage and earn money

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/syncthing/app_versions.json b/charts/syncthing/app_versions.json new file mode 100644 index 0000000000..3bde79d29e --- /dev/null +++ b/charts/syncthing/app_versions.json @@ -0,0 +1,467 @@ +{ + "1.0.36": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/syncthing/1.0.36", + "last_update": "2023-11-07 13:48:16", + "required_features": [ + "normalize/ixVolume", + "validations/lockedHostPath" + ], + "human_version": "1.26.0_1.0.36", + "version": "1.0.36", + "chart_metadata": { + "name": "syncthing", + "description": "Syncthing is a continuous file synchronization program.", + "annotations": { + "title": "Syncthing" + }, + "type": "application", + "version": "1.0.36", + "apiVersion": "v2", + "appVersion": "1.26.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://syncthing.net/", + "icon": "https://media.sys.truenas.net/apps/syncthing/icons/icon.svg", + "sources": [ + "https://syncthing.net", + "https://github.com/truenas/charts/tree/master/charts/syncthing" + ], + "keywords": [ + "storage", + "backup" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Syncthing runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Syncthing is able to chown files." + }, + { + "name": "FOWNER", + "description": "Syncthing is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Syncthing is able to use chroot." + }, + { + "name": "MKNOD", + "description": "Syncthing is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Syncthing is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "Syncthing is able to set file capabilities." + }, + { + "name": "KILL", + "description": "Syncthing is able to kill processes." + }, + { + "name": "SETGID", + "description": "Syncthing is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Syncthing is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Syncthing is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Syncthing is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "Syncthing is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "Syncthing is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "Syncthing is able to write to audit log." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "Syncthing application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for syncthing" + }, + { + "name": "Networking", + "description": "Networking Configuration for syncthing" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-web_port" + ], + "path": "/" + } + }, + "questions": [ + { + "variable": "web_port", + "label": "Web Port for syncthing", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 20910, + "required": true + } + }, + { + "variable": "tcp_port", + "label": "TCP Port for syncthing", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 20978, + "required": true + } + }, + { + "variable": "udp_port", + "label": "UDP Port for syncthing", + "group": "Networking", + "schema": { + "type": "int", + "min": 8000, + "max": 65535, + "default": 20979, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "group": "Networking", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ownerUID", + "label": "Owner User ID", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "ownerGID", + "label": "Owner Group ID", + "group": "Configuration", + "schema": { + "type": "int", + "default": 568, + "min": 1, + "max": 65535 + } + }, + { + "variable": "environmentVariables", + "label": "Syncthing environment", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "Syncthing Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Configuration Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-syncthing_config", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/var/syncthing" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for Syncthing Configuration Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for Syncthing Configuration Volume", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for Syncthing application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

Syncthing

\n

syncthing is a continuous file synchronization program. It synchronizes files between two or\nmore computers in real time, safely protected from prying eyes.

\n
\n

WARNING Do check out https://docs.syncthing.net/users/faq.html#what-things-are-synced to see what is synced.

\n
", + "detailed_readme": "

Syncthing

\n

syncthing is a continuous file synchronization program. It synchronizes files between two or\nmore computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose\nwhere it is stored, whether it is shared with some third party, and how it's transmitted over the internet.

", + "changelog": null + } +} \ No newline at end of file diff --git a/charts/wg-easy/app_versions.json b/charts/wg-easy/app_versions.json new file mode 100644 index 0000000000..6276310021 --- /dev/null +++ b/charts/wg-easy/app_versions.json @@ -0,0 +1,542 @@ +{ + "1.0.12": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/charts/wg-easy/1.0.12", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/ixVolume", + "definitions/nodeIP", + "validations/lockedHostPath" + ], + "human_version": "7_1.0.12", + "version": "1.0.12", + "chart_metadata": { + "name": "wg-easy", + "description": "WG-Easy is the easiest way to install & manage WireGuard!", + "annotations": { + "title": "WG Easy" + }, + "type": "application", + "version": "1.0.12", + "apiVersion": "v2", + "appVersion": "7", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common/2304.0.1", + "version": "2304.0.1" + } + ], + "home": "https://github.com/WeeJeWel/wg-easy", + "icon": "https://media.sys.truenas.net/apps/wg-easy/icons/icon.png", + "sources": [ + "https://github.com/WeeJeWel/wg-easy", + "https://github.com/truenas/charts/tree/master/charts/wg-easy" + ], + "keywords": [ + "wireguard", + "network", + "vpn" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "WG Easy runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "WG Easy is able to chown files." + }, + { + "name": "FOWNER", + "description": "WG Easy is able to bypass permission checks for it's sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "WG Easy is able to use chroot." + }, + { + "name": "MKNOD", + "description": "WG Easy is able to create device nodes." + }, + { + "name": "DAC_OVERRIDE", + "description": "WG Easy is able to bypass permission checks." + }, + { + "name": "FSETID", + "description": "WG Easy is able to set file capabilities." + }, + { + "name": "KILL", + "description": "WG Easy is able to kill processes." + }, + { + "name": "SETGID", + "description": "WG Easy is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "WG Easy is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "WG Easy is able to set process capabilities." + }, + { + "name": "NET_BIND_SERVICE", + "description": "WG Easy is able to bind to privileged ports." + }, + { + "name": "SETFCAP", + "description": "WG Easy is able to set file capabilities." + }, + { + "name": "NET_RAW", + "description": "WG Easy is able to use raw sockets." + }, + { + "name": "AUDIT_WRITE", + "description": "WG Easy is able to write to audit log." + }, + { + "name": "SYS_MODULE", + "description": "WG Easy is able to load kernel modules." + }, + { + "name": "NET_ADMIN", + "description": "WG Easy is able to perform various network-related operations." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Configuration", + "description": "WG-Easy application configuration" + }, + { + "name": "Storage", + "description": "Configure storage for WG-Easy" + }, + { + "name": "Networking", + "description": "Networking Configuration for WG-Easy" + }, + { + "name": "Advanced DNS Settings", + "description": "Configure DNS settings" + }, + { + "name": "Resource Limits", + "description": "Set CPU/memory limits for Kubernetes Pod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "http" + ], + "host": [ + "$node_ip" + ], + "ports": [ + "$variable-webUIPort" + ], + "path": "/" + } + }, + "questions": [ + { + "variable": "wgUDPPort", + "label": "WireGuard UDP Node Port for WG-Easy", + "group": "Networking", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 20920, + "required": true + } + }, + { + "variable": "webUIPort", + "label": "WebUI Node Port for WG-Easy", + "group": "Networking", + "schema": { + "type": "int", + "min": 9000, + "max": 65535, + "default": 20921, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "group": "Networking", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "group": "Advanced DNS Settings", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "options", + "label": "DNS Options", + "schema": { + "type": "list", + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Option Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Option Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "wgeasy", + "label": "WG-Easy Configuration", + "group": "Configuration", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "host", + "label": "Hostname or IP", + "description": "The public hostname or IP of your VPN server.", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + }, + { + "variable": "password", + "label": "Password for WebUI", + "description": "When set, requires a password when logging in to the Web UI.", + "schema": { + "type": "string", + "private": true, + "default": "" + } + }, + { + "variable": "keep_alive", + "label": "Persistent Keep Alive", + "description": "Value in seconds to keep the \"connection\" open. If this value is 0, then connections won't be kept alive.", + "schema": { + "type": "int", + "required": true, + "default": 0 + } + }, + { + "variable": "client_mtu", + "label": "Clients MTU", + "description": "The MTU the clients will use.", + "schema": { + "type": "int", + "required": true, + "default": 1420 + } + }, + { + "variable": "client_address_range", + "label": "Clients IP Address Range", + "description": "Clients IP address range.", + "schema": { + "type": "string", + "required": true, + "default": "10.8.0.x" + } + }, + { + "variable": "client_dns_server", + "label": "Clients DNS Server", + "description": "Clients DNS Server.", + "schema": { + "type": "string", + "required": true, + "default": "1.1.1.1" + } + }, + { + "variable": "allowed_ips", + "label": "Allowed IPs", + "description": "Allowed IPs clients will use. If none provided, <0.0.0.0/0,::/0> will be used.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "entry", + "label": "Allowed IP Entry", + "schema": { + "type": "string", + "required": true, + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "environmentVariables", + "label": "WG-Easy Environment", + "group": "Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "environmentVariable", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "appVolumeMounts", + "label": "WG-Easy Storage", + "group": "Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Configuration Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "datasetName", + "label": "Configuration Volume Dataset Name", + "schema": { + "type": "string", + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ], + "show_if": [ + [ + "hostPathEnabled", + "=", + false + ] + ], + "default": "ix-wg-easy_config", + "editable": false + } + }, + { + "variable": "mountPath", + "label": "Configuration Mount Path", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "hidden": true, + "editable": true, + "default": "/etc/wireguard" + } + }, + { + "variable": "hostPathEnabled", + "label": "Enable Custom Host Path for WG-Easy Configuration Volume", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostPath", + "label": "Host Path for WG-Easy Configuration Volume", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "extraAppVolumeMounts", + "label": "Extra Host Path Volumes", + "group": "Storage", + "schema": { + "type": "list", + "items": [ + { + "variable": "extraAppVolume", + "label": "Host Path Volume", + "description": "Add an extra host path volume for WG-Easy application", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountPath", + "label": "Mount Path in Pod", + "description": "Path where the volume will be mounted inside the pod", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Host path", + "schema": { + "type": "hostpath", + "required": true, + "$ref": [ + "validations/lockedHostPath" + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "enableResourceLimits", + "label": "Enable Pod resource limits", + "group": "Resource Limits", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cpuLimit", + "label": "CPU Limit resource limits", + "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", + "group": "Resource Limits", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", + "default": "4000m" + } + }, + { + "variable": "memLimit", + "label": "Memory Limit", + "group": "Resource Limits", + "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", + "schema": { + "type": "string", + "show_if": [ + [ + "enableResourceLimits", + "=", + true + ] + ], + "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", + "default": "8Gi" + } + } + ] + }, + "app_readme": "

WG-Easy

\n

WG-Easy (WireGuard Easy) is the easiest way to install & manage WireGuard!

", + "detailed_readme": "

WG-Easy

\n

WG-Easy (WireGuard Easy) is the easiest way to install & manage WireGuard!

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/adguard-home/app_versions.json b/community/adguard-home/app_versions.json new file mode 100644 index 0000000000..5d66c2fbd9 --- /dev/null +++ b/community/adguard-home/app_versions.json @@ -0,0 +1,334 @@ +{ + "1.0.25": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/adguard-home/1.0.25", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "0.107.40_1.0.25", + "version": "1.0.25", + "chart_metadata": { + "name": "adguard-home", + "description": "Free and open source, powerful network-wide ads & trackers blocking DNS server.", + "annotations": { + "title": "AdGuard Home" + }, + "type": "application", + "version": "1.0.25", + "apiVersion": "v2", + "appVersion": "0.107.40", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/AdguardTeam/AdGuardHome", + "icon": "https://media.sys.truenas.net/apps/adguard-home/icons/icon.svg", + "sources": [ + "https://github.com/AdguardTeam/AdGuardHome", + "https://github.com/truenas/charts/tree/master/community/adguard-home", + "https://hub.docker.com/r/adguard/adguardhome" + ], + "keywords": [ + "dns", + "adblock" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "AdGuard Home requires root privileges to bind to privileged ports" + } + ], + "capabilities": [ + { + "name": "NET_BIND_SERVICE", + "description": "This is used by the DHCP and DNS service" + }, + { + "name": "NET_RAW", + "description": "This is used by the DHCP service" + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "AdGuard Home Configuration", + "description": "Configure AdGuard Home" + }, + { + "name": "Network Configuration", + "description": "Configure Network for AdGuard Home" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for AdGuard Home" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for AdGuard Home" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "adguardNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the AdGuard Home WebUI. Set the same during the setup wizard.\nIn case you set a different port, you will need to stop/start the app for the\nport set here to take effect. (Or wait for the container to restart automatically)\n", + "schema": { + "type": "int", + "default": 30004, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enableDHCP", + "label": "Enable DHCP", + "description": "This will only append the needed capabilities for DHCP to work
\nThe configuration for DHCP is done in the AdGuard Home WebUI\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "adguardStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "work", + "label": "AdGuard Home Data Storage", + "description": "The path to store AdGuard Home work.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "work", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "conf", + "label": "AdGuard Home Configuration Storage", + "description": "The path to store AdGuard Home configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "conf", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for AdGuard Home.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for AdGuard Home.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

AdGuard Home

\n

During the setup wizard, AdGuard Home presents an option to select on which port the web interface will be available.\n(Defaults to 80. Which is a privileged port and also usually the TrueNAS SCALE UI uses that port)\nBecause of that, App will force the webUI to listen to port 30000 (or the port selected by user in the TrueNAS SCALE UI).

\n

If you select a different port in the wizard, the Dashboard will not work initially but\nafter a couple of minutes container will automatically restart and the Dashboard will\nbe available on the port you selected on the TrueNAS SCALE UI.

\n
\n\n
", + "detailed_readme": "

AdGuard Home

\n

During the setup wizard, AdGuard Home presents an option to select on which port the web interface will be available.\n(Defaults to 80. Which is a privileged port and also usually the TrueNAS SCALE UI uses that port)\nBecause of that, App will force the webUI to listen to port 30000 (or the port selected by user in the TrueNAS SCALE UI).

\n

If you select a different port in the wizard, the Dashboard will not work initially but\nafter a couple of minutes container will automatically restart and the Dashboard will\nbe available on the port you selected on the TrueNAS SCALE UI.

\n
\n\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/autobrr/app_versions.json b/community/autobrr/app_versions.json new file mode 100644 index 0000000000..395e3dd5a1 --- /dev/null +++ b/community/autobrr/app_versions.json @@ -0,0 +1,553 @@ +{ + "1.1.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/autobrr/1.1.3", + "last_update": "2023-11-01 00:33:50", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.33.0_1.1.3", + "version": "1.1.3", + "chart_metadata": { + "name": "autobrr", + "description": "Autobrr is the modern download automation tool for torrents and usenet.", + "annotations": { + "title": "Autobrr" + }, + "type": "application", + "version": "1.1.3", + "apiVersion": "v2", + "appVersion": "1.33.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://github.com/autobrr/autobrr", + "icon": "https://media.sys.truenas.net/apps/autobrr/icons/icon.png", + "sources": [ + "https://autobrr.com/installation/docker", + "https://github.com/truenas/charts/tree/master/community/autobrr", + "https://github.com/autobrr/autobrr" + ], + "keywords": [ + "media", + "torrent", + "usenet" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "autobrr", + "groupName": "autobrr", + "gid": 568, + "uid": 568, + "description": "Autobrr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Autobrr Configuration", + "description": "Configure Autobrr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Autobrr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Autobrr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Autobrr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Autobrr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Autobrr Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "autobrrConfig", + "label": "", + "group": "Autobrr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Autobrr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "autobrrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Autobrr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Autobrr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "autobrrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Autobrr Web UI.", + "schema": { + "type": "int", + "default": 30051, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "autobrrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Autobrr Config Storage", + "description": "The path to store Autobrr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Autobrr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Autobrr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Autobrr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Autobrr

\n

Autobrr is the modern download automation tool for torrents and usenet.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Autobrr directories.\nAfterward, the Autobrr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Autobrr

\n

Autobrr is the modern download automation tool for torrents and usenet.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Autobrr directories.\nAfterward, the Autobrr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/bazarr/app_versions.json b/community/bazarr/app_versions.json new file mode 100644 index 0000000000..1d75e3b1c1 --- /dev/null +++ b/community/bazarr/app_versions.json @@ -0,0 +1,528 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/bazarr/1.1.2", + "last_update": "2023-10-28 19:34:07", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.4.0_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "bazarr", + "description": "Bazarr is a companion application to Sonarr and Radarr. It manages and downloads subtitles based on your requirements.", + "annotations": { + "title": "Bazarr" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "1.4.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.bazarr.media/", + "icon": "https://media.sys.truenas.net/apps/bazarr/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/bazarr", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/bazarr", + "https://github.com/morpheus65535/bazarr" + ], + "keywords": [ + "media", + "subtitles" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "bazarr", + "groupName": "bazarr", + "gid": 568, + "uid": 568, + "description": "Bazarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Bazarr Configuration", + "description": "Configure Bazarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Bazarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Bazarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Bazarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Bazarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "bazarrConfig", + "label": "", + "group": "Bazarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Bazarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "bazarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Bazarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Bazarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "bazarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Bazarr Web UI.", + "schema": { + "type": "int", + "default": 30046, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "bazarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Bazarr Config Storage", + "description": "The path to store Bazarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Bazarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Bazarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Bazarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Bazarr

\n

Bazarr is a companion application to Sonarr and Radarr. It manages and downloads subtitles based on your requirements.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Bazarr directories.\nAfterward, the Bazarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Bazarr

\n

Bazarr is a companion application to Sonarr and Radarr. It manages and downloads subtitles based on your requirements.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Bazarr directories.\nAfterward, the Bazarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/briefkasten/app_versions.json b/community/briefkasten/app_versions.json new file mode 100644 index 0000000000..50c3a9b072 --- /dev/null +++ b/community/briefkasten/app_versions.json @@ -0,0 +1,1030 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/briefkasten/1.1.2", + "last_update": "2023-10-28 19:42:08", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "latest_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "briefkasten", + "description": "Briefkasten is a self hosted bookmarking app", + "annotations": { + "title": "Briefkasten" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "latest", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://github.com/ndom91/briefkasten", + "icon": "https://media.sys.truenas.net/apps/briefkasten/icons/icon.svg", + "sources": [ + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/briefkasten", + "https://github.com/ndom91/briefkasten", + "https://docs.briefkastenhq.com/" + ], + "keywords": [ + "bookmark" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "briefkasten", + "groupName": "briefkasten", + "gid": 1001, + "uid": 1001, + "description": "Briefkasten can runs as a non-root user." + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Briefkasten Configuration", + "description": "Configure Briefkasten" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Briefkasten" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Briefkasten" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Briefkasten" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "briefkastenConfig", + "label": "", + "group": "Briefkasten Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "url", + "label": "BaseURL", + "description": "The URL that Briefkasten will be accessible from.
\nExample:
\nhttp://server.ip:30080
\nhttps://Briefkasten.example.com\n", + "schema": { + "type": "uri", + "default": "", + "required": true + } + }, + { + "variable": "smtp", + "label": "SMTP Auth Provider", + "description": "Configure SMTP for Briefkasten.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable SMTP for auth.", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "server", + "label": "SMTP Server", + "description": "The SMTP server to use.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "from", + "label": "SMTP From", + "description": "The SMTP from address to use.", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "github", + "label": "GitHub Auth Provider", + "description": "Configure GitHub for Briefkasten.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable GitHub for auth.", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "id", + "label": "GitHub Client ID", + "description": "The GitHub Client ID.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "secret", + "label": "GitHub Client Secret", + "description": "The GitHub Client Secret.", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "google", + "label": "Google Auth Provider", + "description": "Configure Google for Briefkasten.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable Google for auth.", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "id", + "label": "Google Client ID", + "description": "The Google Client ID.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "secret", + "label": "Google Client Secret", + "description": "The Google Client Secret.", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "keycloak", + "label": "Keycloak Auth Provider", + "description": "Configure Keycloak for Briefkasten.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable Keycloak for auth.", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "name", + "label": "Keycloak Name", + "description": "The Keycloak Name.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "id", + "label": "Keycloak Client ID", + "description": "The Keycloak Client ID.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "secret", + "label": "Keycloak Client Secret", + "description": "The Keycloak Client Secret.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "issuer", + "label": "Keycloak Issuer", + "description": "The Keycloak Issuer.", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "authentik", + "label": "Authentik Auth Provider", + "description": "Configure Authentik for Briefkasten.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable Authentik for auth.", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "name", + "label": "Authentik Name", + "description": "The Authentik Name.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "id", + "label": "Authentik Client ID", + "description": "The Authentik Client ID.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "secret", + "label": "Authentik Client Secret", + "description": "The Authentik Client Secret.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "issuer", + "label": "Authentik Issuer", + "description": "The Authentik Issuer.", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Briefkasten.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "briefkastenNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Briefkasten Web UI.", + "schema": { + "type": "int", + "default": 30080, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "briefkastenStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "avatars", + "label": "Briefkasten Avatars Storage", + "description": "The path to store Briefkasten Avatars.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "avatars", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "backgroundImages", + "label": "Briefkasten Background Images Storage", + "description": "The path to store Briefkasten Background Images.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "bg-img", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "attachments", + "label": "Briefkasten Attachments Storage", + "description": "The path to store Briefkasten Attachments.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "attachments", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Postgres Data Storage", + "description": "The path to store Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Postgres Backup Storage", + "description": "The path to store Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Briefkasten.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Briefkasten.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Briefkasten.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Briefkasten

\n

Briefkasten is a self hosted bookmarking app

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "detailed_readme": "

Briefkasten

\n

Briefkasten is a self hosted bookmarking app

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/castopod/app_versions.json b/community/castopod/app_versions.json new file mode 100644 index 0000000000..0db70db95a --- /dev/null +++ b/community/castopod/app_versions.json @@ -0,0 +1,712 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/castopod/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.6.5_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "castopod", + "description": "Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.", + "annotations": { + "title": "Castopod" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "1.6.5", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://castopod.org", + "icon": "https://media.sys.truenas.net/apps/castopod/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/castopod/castopod", + "https://github.com/truenas/charts/tree/master/community/castopod", + "https://code.castopod.org/adaures/castopod" + ], + "keywords": [ + "podcast" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Castopod run as root user" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Castopod is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Castopod is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Castopod is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Castopod is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Castopod is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Castopod Configuration", + "description": "Configure Castopod" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Castopod" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Castopod" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Castopod" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + }, + "admin": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_admin" + } + }, + "questions": [ + { + "variable": "castopodConfig", + "label": "", + "group": "Castopod Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "baseUrl", + "label": "Base URL", + "description": "The base URL for Castopod.
\nExample: http://your.server.ip:30085\n", + "schema": { + "type": "uri", + "required": true, + "default": "" + } + }, + { + "variable": "webTimeout", + "label": "Web Timeout", + "description": "The timeout for Castopod requests in seconds.", + "schema": { + "type": "int", + "required": true, + "default": 900, + "min": 1 + } + }, + { + "variable": "webMaxBodySize", + "label": "Web Max Body Size", + "description": "The maximum body size for Castopod requests in megabytes.", + "schema": { + "type": "int", + "required": true, + "default": 512, + "min": 1 + } + }, + { + "variable": "phpMemoryLimit", + "label": "PHP Memory Limit", + "description": "The PHP memory limit for Castopod.", + "schema": { + "type": "int", + "required": true, + "default": 512, + "min": 1 + } + }, + { + "variable": "enable2fa", + "label": "Enable 2FA", + "description": "Enable 2FA for Castopod.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "disableHttpsRedirect", + "label": "Disable HTTPS Redirect", + "description": "Disable HTTPS redirect for Castopod.
\nThis is useful if you are using a reverse proxy with HTTPS.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Castopod.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "castopodNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Castopod WebUI.", + "schema": { + "type": "int", + "default": 30085, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "castopodStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Castopod Data Storage", + "description": "The path to store Castopod data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbData", + "label": "Castopod MariaDB Data Storage", + "description": "The path to store Castopod MariaDB Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbBackup", + "label": "Castopod MariaDB Backup Storage", + "description": "The path to store Castopod MariaDB Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Castopod.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Castopod.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Castopod.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Castopod

\n

Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.

", + "detailed_readme": "

Castopod

\n

Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/chia/app_versions.json b/community/chia/app_versions.json new file mode 100644 index 0000000000..aea7f25cc6 --- /dev/null +++ b/community/chia/app_versions.json @@ -0,0 +1,543 @@ +{ + "1.0.22": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/chia/1.0.22", + "last_update": "2023-10-19 04:50:58", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2.1.1_1.0.22", + "version": "1.0.22", + "chart_metadata": { + "name": "chia", + "description": "Chia is a modern cryptocurrency built from scratch, designed to be efficient, decentralized, and secure.", + "annotations": { + "title": "Chia" + }, + "type": "application", + "version": "1.0.22", + "apiVersion": "v2", + "appVersion": "2.1.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.chia.net/", + "icon": "https://media.sys.truenas.net/apps/chia/icons/icon.svg", + "sources": [ + "https://github.com/Chia-Network/chia-docker", + "https://github.com/truenas/charts/tree/master/community/chia", + "https://www.chia.net/" + ], + "keywords": [ + "blockchain", + "chia" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Chia requires root privileges to start the chia process." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Chia Configuration", + "description": "Configure Chia" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Chia" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Chia" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Chia" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "Chia Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "chiaNetwork", + "group": "Network Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "chiaPort", + "label": "Chia Port", + "description": "Ports below 9000 will enable Host Network automatically.", + "schema": { + "type": "int", + "default": 38444, + "required": true + } + }, + { + "variable": "farmerPort", + "label": "Farmer Port", + "description": "Ports below 9000 will enable Host Network automatically.", + "schema": { + "type": "int", + "default": 38447, + "required": true + } + } + ] + } + }, + { + "variable": "chiaConfig", + "group": "Chia Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "service", + "label": "Chia Service Mode", + "description": "Select the Chia Service Mode", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Full Node" + }, + { + "value": "farmer-only", + "description": "Farmer" + }, + { + "value": "harvester", + "description": "Harvester" + } + ] + } + }, + { + "variable": "farmer_address", + "label": "Farmer Address", + "schema": { + "type": "string", + "show_if": [ + [ + "service", + "=", + "harvester" + ] + ], + "required": true, + "default": "" + } + }, + { + "variable": "farmer_port", + "label": "Farmer Port", + "schema": { + "type": "int", + "show_if": [ + [ + "service", + "=", + "harvester" + ] + ], + "required": true, + "default": 8447 + } + }, + { + "variable": "ca", + "label": "CA", + "schema": { + "type": "string", + "show_if": [ + [ + "service", + "=", + "harvester" + ] + ], + "required": true, + "default": "" + } + }, + { + "variable": "full_node_peer", + "label": "Full Node Peer", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environments", + "description": "Additional Environments", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true, + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "chiaStorage", + "group": "Storage Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Data", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "default": "ixVolume", + "required": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "default": "" + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "default": "data", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ] + } + } + ] + } + }, + { + "variable": "plots", + "label": "Plots", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "default": "ixVolume", + "required": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "default": "" + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "default": "plots", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "hidden": true, + "$ref": [ + "normalize/ixVolume" + ] + } + } + ] + } + }, + { + "variable": "additionalVolumes", + "label": "Additional Volumes", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "volume", + "label": "Volume", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "isPlotDir", + "label": "Directory for Plots", + "description": "If this is checked, it will append the directory to variable
\nKeep this unchecked if you want to mount a directory for anything else.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "default": "ixVolume", + "required": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "default": "" + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "default": "volume1", + "required": true, + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "Path to mount the volume inside the container", + "schema": { + "type": "string", + "required": true, + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Chia.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Chia.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Chia

\n

This container runs as root user.

\n

When a port is set to < 9000. Host Networking is enabled automatically.

\n
\n

Also NodePort services turn to ClusterIP services, to avoid attempts to bind ports twice.

\n
\n

Key file is stored in /plots/keyfile and is generated automatically, only if the file does not exist.\nIf you want to use your own keyfile, you can create a file called keyfile in the /plots directory and it will be used instead.

\n
\n

When set on harvester mode keys variable is set to none and no generation is performed.

\n
", + "detailed_readme": "

Chia

\n

This container runs as root user.

\n

When a port is set to < 9000. Host Networking is enabled automatically.

\n
\n

Also NodePort services turn to ClusterIP services, to avoid attempts to bind ports twice.

\n
\n

Key file is stored in /plots/keyfile and is generated automatically, only if the file does not exist.\nIf you want to use your own keyfile, you can create a file called keyfile in the /plots directory and it will be used instead.

\n
\n

When set on harvester mode keys variable is set to none and no generation is performed.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/clamav/app_versions.json b/community/clamav/app_versions.json new file mode 100644 index 0000000000..34d675e418 --- /dev/null +++ b/community/clamav/app_versions.json @@ -0,0 +1,430 @@ +{ + "1.0.12": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/clamav/1.0.12", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.0.1_1.0.12", + "version": "1.0.12", + "chart_metadata": { + "name": "clamav", + "description": "ClamAV is an open source (GPLv2) anti-virus toolkit.", + "annotations": { + "title": "Clam AV" + }, + "type": "application", + "version": "1.0.12", + "apiVersion": "v2", + "appVersion": "1.0.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.clamav.net/", + "icon": "https://media.sys.truenas.net/apps/clamav/icons/icon.png", + "sources": [ + "https://docs.clamav.net/", + "https://github.com/truenas/charts/tree/master/community/clamav", + "https://www.clamav.net/" + ], + "keywords": [ + "anti-virus", + "clamav" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "ClamAV runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "ClamAV is able to chown files." + }, + { + "name": "FOWNER", + "description": "ClamAV is able bypass permission checks for it's sub-processes." + }, + { + "name": "DAC_OVERRIDE", + "description": "ClamAV is able to bypass permission checks." + }, + { + "name": "SETGID", + "description": "ClamAV is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "ClamAV is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "ClamAV Configuration", + "description": "Configure ClamAV" + }, + { + "name": "Network Configuration", + "description": "Configure Network for ClamAV" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for ClamAV" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for ClamAV" + } + ], + "questions": [ + { + "variable": "clamavConfig", + "label": "", + "group": "ClamAV Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "disableClamd", + "label": "Disable ClamD", + "description": "Do not start Clam daemon", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "disableFreshClamd", + "label": "Disable FreshClamD", + "description": "Do not start the FreshClam daemon", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "disableMilterd", + "label": "Disable MilterD", + "description": "Do not start the ClamAV-Milter daemon", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "clamdStartupTimeout", + "label": "ClamD Startup Timeout", + "description": "Seconds to wait for ClamD to start", + "schema": { + "type": "int", + "default": 1800, + "required": true + } + }, + { + "variable": "freshclamChecks", + "label": "Fresh Clam Checks", + "description": "Times to check per day for a new database.", + "schema": { + "type": "int", + "default": 1, + "min": 1, + "max": 50, + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for ClamAV.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "clamavNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "clamdPort", + "label": "ClamD Port", + "description": "The port for the ClamAV ClamD", + "schema": { + "type": "int", + "default": 30005, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "milterdPort", + "label": "MilterD Port", + "description": "The port for the ClamAV MilterD", + "schema": { + "type": "int", + "default": 30006, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "clamavStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "sigdb", + "label": "ClamAV Signature Database Storage", + "description": "The path to store ClamAV Signature Database.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "sig-db", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "scandir", + "label": "ClamAV Scan Storage", + "description": "The path to store ClamAV Scan storage.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "scan-dir", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for ClamAV.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for ClamAV.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

ClamAV

\n

ClamAV - ClamAV\u00ae is an open-source antivirus engine for detecting trojans, viruses, malware & other malicious threats.

\n", + "detailed_readme": "

ClamAV

\n

ClamAV - ClamAV\u00ae is an open-source antivirus engine for detecting trojans, viruses, malware & other malicious threats.

\n", + "changelog": null + } +} \ No newline at end of file diff --git a/community/cloudflared/app_versions.json b/community/cloudflared/app_versions.json new file mode 100644 index 0000000000..3847ca521c --- /dev/null +++ b/community/cloudflared/app_versions.json @@ -0,0 +1,465 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/cloudflared/1.1.2", + "last_update": "2023-11-01 00:33:50", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2023.10.0_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "cloudflared", + "description": "Cloudflared is a client for Cloudflare Tunnel, a daemon that exposes private services through the Cloudflare edge.", + "annotations": { + "title": "Cloudflared" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "2023.10.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://github.com/cloudflare/cloudflared", + "icon": "https://media.sys.truenas.net/apps/cloudflared/icons/icon.png", + "sources": [ + "https://github.com/cloudflare/cloudflared", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/cloudflared", + "https://hub.docker.com/r/cloudflare/cloudflared" + ], + "keywords": [ + "network", + "cloudflare", + "tunnel" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "cloudflared", + "groupName": "cloudflared", + "gid": 568, + "uid": 568, + "description": "Cloudflared can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Cloudflared Configuration", + "description": "Configure Cloudflared" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Cloudflared" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Cloudflared" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Cloudflared" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Cloudflared" + } + ], + "questions": [ + { + "variable": "cloudflaredConfig", + "label": "", + "group": "Cloudflared Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "tunnelToken", + "label": "Tunnel Token", + "description": "The tunnel token to use for Cloudflared.", + "schema": { + "type": "string", + "default": "", + "required": true, + "private": true + } + }, + { + "variable": "additionalArgs", + "label": "Additional Arguments", + "description": "Configure additional arguments for Cloudflared.
\nThose will be placed after the \"tunnel --no-autoupdate\" and before \"run\".
\nExample:
\ntunnel --no-autoupdate run
\nOne argument per line.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Argument", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Cloudflared.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "cloudflaredRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Cloudflared will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Cloudflared will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "cloudflaredNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "cloudflaredStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Cloudflared.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Cloudflared.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Cloudflared.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Cloudflared

\n

Cloudflared is a client for Cloudflare Tunnel, a daemon that exposes private services through the Cloudflare edge.

", + "detailed_readme": "

Cloudflared

\n

Cloudflared is a client for Cloudflare Tunnel, a daemon that exposes private services through the Cloudflare edge.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/ddns-updater/app_versions.json b/community/ddns-updater/app_versions.json new file mode 100644 index 0000000000..55fc9ebaff --- /dev/null +++ b/community/ddns-updater/app_versions.json @@ -0,0 +1,2583 @@ +{ + "1.0.16": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/ddns-updater/1.0.16", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "v2.5.0_1.0.16", + "version": "1.0.16", + "chart_metadata": { + "name": "ddns-updater", + "description": "Lightweight universal DDNS Updater with web UI", + "annotations": { + "title": "DDNS Updater" + }, + "type": "application", + "version": "1.0.16", + "apiVersion": "v2", + "appVersion": "v2.5.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/qdm12/ddns-updater", + "icon": "https://media.sys.truenas.net/apps/ddns-updater/icons/icon.svg", + "sources": [ + "https://github.com/qdm12/ddns-updater", + "https://github.com/truenas/charts/tree/master/community/ddns-updater", + "https://hub.docker.com/r/qmcgaw/ddns-updater" + ], + "keywords": [ + "ddns-updater", + "ddns" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "ddns-updater", + "groupName": "ddns-updater", + "gid": 568, + "uid": 568, + "description": "DDNS Updater runs as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "DDNS Updater Configuration", + "description": "Configure DDNS Updater" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for DDNS Updater" + }, + { + "name": "Network Configuration", + "description": "Configure Network for DDNS Updater" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for DDNS Updater" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for DDNS Updater" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "DDNS Updater Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "ddnsConfig", + "label": "", + "group": "DDNS Updater Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "DNS Provider Configuration", + "description": "Configuration for DDNS Updater.
\nChoose your provider in the following link for more information
\nhttps://github.com/qdm12/ddns-updater#configuration\n", + "schema": { + "type": "list", + "min": 1, + "required": true, + "empty": false, + "default": [], + "items": [ + { + "variable": "configEntry", + "label": "Configuration Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "provider", + "label": "Provider", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "aliyun", + "description": "Aliyun" + }, + { + "value": "allinkl", + "description": "All-Inkl" + }, + { + "value": "cloudflare", + "description": "Cloudflare" + }, + { + "value": "dd24", + "description": "DD24" + }, + { + "value": "ddnss", + "description": "DDNSS" + }, + { + "value": "digitalocean", + "description": "Digital Ocean" + }, + { + "value": "dnsomatic", + "description": "DNS O Matic" + }, + { + "value": "dnspod", + "description": "DNS Pod" + }, + { + "value": "dondominio", + "description": "Don Dominio" + }, + { + "value": "dreamhost", + "description": "Dreamhost" + }, + { + "value": "duckdns", + "description": "Duck DNS" + }, + { + "value": "dyn", + "description": "DynDNS" + }, + { + "value": "dynu", + "description": "Dynu" + }, + { + "value": "dynv6", + "description": "DynV6" + }, + { + "value": "freedns", + "description": "FreeDNS" + }, + { + "value": "gandi", + "description": "Gandi" + }, + { + "value": "gcp", + "description": "GCP" + }, + { + "value": "godaddy", + "description": "GoDaddy" + }, + { + "value": "google", + "description": "Google" + }, + { + "value": "he", + "description": "He.net" + }, + { + "value": "infomaniak", + "description": "Infomaniak" + }, + { + "value": "inwx", + "description": "INWX" + }, + { + "value": "linode", + "description": "Linode" + }, + { + "value": "luadns", + "description": "LuaDNS" + }, + { + "value": "namecheap", + "description": "Namecheap" + }, + { + "value": "njalla", + "description": "Njalla" + }, + { + "value": "noip", + "description": "NoIP" + }, + { + "value": "opendns", + "description": "OpenDNS" + }, + { + "value": "ovh", + "description": "OVH" + }, + { + "value": "porkbun", + "description": "Porkbun" + }, + { + "value": "selfhost.de", + "description": "Selfhost.de" + }, + { + "value": "servercow", + "description": "Servercow" + }, + { + "value": "spdyn", + "description": "Spdyn.de" + }, + { + "value": "strato", + "description": "Strato" + }, + { + "value": "variomedia", + "description": "Variomedia" + } + ] + } + }, + { + "variable": "domain", + "label": "Domain", + "description": "Domain
\nFor example: example.com\n", + "schema": { + "type": "string", + "required": true, + "empty": false + } + }, + { + "variable": "ipVersion", + "label": "IP Version", + "description": "IP Version.
\nFor example: IPv4\n", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "ipv4", + "description": "IPv4" + }, + { + "value": "ipv6", + "description": "IPv6" + }, + { + "value": "", + "description": "IPv4 and IPv6" + } + ] + } + }, + { + "variable": "host", + "label": "Host", + "description": "Host.
\nFor example: \"@\"\n", + "schema": { + "type": "string", + "default": "@", + "required": true, + "empty": false + } + }, + { + "variable": "aliyunAccessKey", + "label": "Aliyun Access Key", + "description": "Aliyun Access Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "aliyun" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "aliyunSecret", + "label": "Aliyun Secret", + "description": "Aliyun Secret.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "aliyun" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "allinklUsername", + "label": "All-Inkl Username", + "description": "All-Inkl Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "allinkl" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "allinklPassword", + "label": "All-Inkl Password", + "description": "All-Inkl Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "allinkl" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "cloudflareZoneID", + "label": "Cloudflare Zone ID", + "description": "Cloudflare Zone ID.
\nYou can find it in the Overview tab of your domain.\n", + "schema": { + "type": "string", + "required": true, + "private": true, + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ] + } + }, + { + "variable": "cloudflareTtl", + "label": "Cloudflare TTL", + "description": "Cloudflare TTL.
\n1 = Automatic
\n600 = 10 minutes\n", + "schema": { + "type": "int", + "min": 1, + "required": true, + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ], + "default": 1 + } + }, + { + "variable": "cloudflareProxied", + "label": "Cloudflare Proxied", + "description": "Cloudflare Proxied.
\nTrue = Proxied
\nFalse = DNS Only\n", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ], + "default": false + } + }, + { + "variable": "cloudflareToken", + "label": "Cloudflare Token", + "description": "Cloudflare Token.", + "schema": { + "type": "string", + "private": true, + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ] + } + }, + { + "variable": "cloudflareUserServiceKey", + "label": "Cloudflare User Service Key", + "description": "Cloudflare User Service Key.", + "schema": { + "type": "string", + "private": true, + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ] + } + }, + { + "variable": "cloudflareEmail", + "label": "Cloudflare Email", + "description": "Cloudflare Email.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ] + } + }, + { + "variable": "cloudflareApiKey", + "label": "Cloudflare API Key", + "description": "Cloudflare API Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "cloudflare" + ] + ] + } + }, + { + "variable": "dd24Password", + "label": "DD24 Password", + "description": "DD24 Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dd24" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "ddnssUsername", + "label": "DDNSS Username", + "description": "DDNSS Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "ddnss" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "ddnssPassword", + "label": "DDNSS Password", + "description": "DDNSS Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "ddnss" + ] + ], + "private": true, + "required": true, + "empty": false + } + }, + { + "variable": "ddnssProviderIP", + "label": "DDNSS Provider IP", + "description": "DDNSS Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "ddnss" + ] + ], + "default": false + } + }, + { + "variable": "ddnssDualStack", + "label": "DDNSS Dual Stack", + "description": "DDNSS Dual Stack.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "ddnss" + ] + ], + "default": false + } + }, + { + "variable": "digitalOceanToken", + "label": "Digital Ocean Token", + "description": "Digital Ocean Token", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "digitalocean" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "dnsOMaticUsername", + "label": "DNS O Matic Username", + "description": "DNS O Matic Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dnsomatic" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "dnsOMaticPassword", + "label": "DNS O Matic Password", + "description": "DNS O Matic Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dnsomatic" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "dnsOMaticProviderIP", + "label": "DNS O Matic Provider IP", + "description": "DNS O Matic Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "dnsomatic" + ] + ], + "default": false + } + }, + { + "variable": "dnsPodToken", + "label": "DNS Pod Token", + "description": "DNS Pod Token.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dnspod" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "donDominioUsername", + "label": "Don Dominio Username", + "description": "Don Dominio Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dondominio" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "donDominioPassword", + "label": "Don Dominio Password", + "description": "Don Dominio Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dondominio" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "donDominioName", + "label": "Don Dominio Name", + "description": "Don Dominio Name.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dondominio" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "dreamHostKey", + "label": "Dreamhost Key", + "description": "Dreamhost Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dreamhost" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "duckdnsToken", + "label": "Duck DNS Token", + "description": "Duck DNS Token.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "duckdns" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "duckdnsProviderIP", + "label": "Duck DNS Provider IP", + "description": "Duck DNS Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "duckdns" + ] + ], + "default": false + } + }, + { + "variable": "dynClientKey", + "label": "DynDNS Client Key", + "description": "DynDNS Client Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dyn" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "dynUsername", + "label": "DynDNS Username", + "description": "DynDNS Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dyn" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "dynProviderIP", + "label": "DynDNS Provider IP", + "description": "DynDNS Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "dyn" + ] + ], + "default": false + } + }, + { + "variable": "dynuUsername", + "label": "Dynu Username", + "description": "Dynu Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dynu" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "dynuPassword", + "label": "Dynu Password", + "description": "Dynu Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dynu" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "dynuGroup", + "label": "Dynu Group", + "description": "Dynu Group.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dynu" + ] + ] + } + }, + { + "variable": "dynuProviderIP", + "label": "Dynu Provider IP", + "description": "Dynu Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "dynu" + ] + ], + "default": false + } + }, + { + "variable": "dynv6Token", + "label": "DynV6 Token", + "description": "DynV6 Token", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "dynv6" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "dynv6ProviderIP", + "label": "DynV6 Provider IP", + "description": "DynV6 Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "dynv6" + ] + ], + "default": false + } + }, + { + "variable": "freeDnsToken", + "label": "FreeDNS Token", + "description": "FreeDNS Token.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "freedns" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "gandiKey", + "label": "Gandi Key", + "description": "Gandi Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "gandi" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "gandiTtl", + "label": "Gandi TTL", + "description": "Gandi TTL.", + "schema": { + "type": "int", + "show_if": [ + [ + "provider", + "=", + "gandi" + ] + ], + "default": 3600, + "required": true + } + }, + { + "variable": "gcpProject", + "label": "GCP Project", + "description": "GCP Project.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "gcp" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "gcpZone", + "label": "GCP Zone", + "description": "GCP Zone.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "gcp" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "gcpCredentials", + "label": "GCP Credentials", + "description": "GCP Credentials.
\nPaste the JSON content in this field\n", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "gcp" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "godaddyKey", + "label": "GoDaddy Key", + "description": "GoDaddy Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "godaddy" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "godaddySecret", + "label": "GoDaddy Secret", + "description": "GoDaddy Secret.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "godaddy" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "googleUsername", + "label": "Google Username", + "description": "Google Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "googlePassword", + "label": "Google Password", + "description": "Google Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "hePassword", + "label": "He.net Password", + "description": "He.net Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "he" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "heProviderIP", + "label": "He.net Provider IP", + "description": "He.net Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "he" + ] + ], + "default": false + } + }, + { + "variable": "infomaniakUsername", + "label": "Infomaniak Username", + "description": "Infomaniak Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "infomaniak" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "infomaniakPassword", + "label": "Infomaniak Password", + "description": "Infomaniak Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "infomaniak" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "infomaniakProviderIP", + "label": "Infomaniak Provider IP", + "description": "Infomaniak Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "infomaniak" + ] + ], + "default": false + } + }, + { + "variable": "inwxUsername", + "label": "INWX Username", + "description": "INWX Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "inwx" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "inwxPassword", + "label": "INWX Password", + "description": "INWX Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "inwx" + ] + ], + "private": true, + "required": true, + "empty": false + } + }, + { + "variable": "linodeToken", + "label": "Linode Token", + "description": "Linode Token.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "linode" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "luadnsToken", + "label": "LuaDNS Token", + "description": "LuaDNS Token.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "luadns" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "luadnsEmail", + "label": "LuaDNS Email", + "description": "LuaDNS Email.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "luadns" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "namecheapPassword", + "label": "Namecheap Password", + "description": "Namecheap Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "namecheap" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "namecheapProviderIP", + "label": "Namecheap Provider IP", + "description": "Namecheap Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "namecheap" + ] + ], + "default": false + } + }, + { + "variable": "njallaKey", + "label": "Njalla Key", + "description": "Njalla Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "njalla" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "njallaProviderIP", + "label": "Njalla Provider IP", + "description": "Njalla Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "njalla" + ] + ], + "default": false + } + }, + { + "variable": "noipUsername", + "label": "NoIP Username", + "description": "NoIP Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "noip" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "noipPassword", + "label": "NoIP Password", + "description": "NoIP Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "noip" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "noipProviderIP", + "label": "NoIP Provider IP", + "description": "NoIP Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "noip" + ] + ], + "default": false + } + }, + { + "variable": "opendnsUsername", + "label": "OpenDNS Username", + "description": "OpenDNS Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "opendns" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "opendnsPassword", + "label": "OpenDNS Password", + "description": "OpenDNS Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "opendns" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "opendnsProviderIP", + "label": "OpenDNS Provider IP", + "description": "OpenDNS Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "opendns" + ] + ], + "default": false + } + }, + { + "variable": "ovhMode", + "label": "OVH Mode", + "description": "OVH Mode.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ], + "default": "dynamic", + "required": true, + "enum": [ + { + "value": "dynamic", + "description": "Dynamic" + }, + { + "value": "api", + "description": "API" + } + ] + } + }, + { + "variable": "ovhUsername", + "label": "OVH Username", + "description": "OVH Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ] + } + }, + { + "variable": "ovhPassword", + "label": "OVH Password", + "description": "OVH Password.", + "schema": { + "type": "string", + "private": true, + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ] + } + }, + { + "variable": "ovhApiEndpoint", + "label": "OVH API Endpoint", + "description": "OVH API Endpoint.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ], + "default": "ovh-eu" + } + }, + { + "variable": "ovhAppKey", + "label": "OVH Application Key", + "description": "OVH Application Key.", + "schema": { + "type": "string", + "private": true, + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ] + } + }, + { + "variable": "ovhAppSecret", + "label": "OVH Application Secret", + "description": "OVH Application Secret.", + "schema": { + "type": "string", + "private": true, + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ] + } + }, + { + "variable": "ovhConsumerKey", + "label": "OVH Consumer Key", + "description": "OVH Consumer Key.", + "schema": { + "type": "string", + "private": true, + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ] + } + }, + { + "variable": "ovhProviderIP", + "label": "OVH Provider IP", + "description": "OVH Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "ovh" + ] + ], + "default": false + } + }, + { + "variable": "porkbunApiKey", + "label": "Porkbun API Key", + "description": "Porkbun API Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "porkbun" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "porkbunSecretApiKey", + "label": "Porkbun Secret API Key", + "description": "Porkbun Secret API Key.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "porkbun" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "porkbunTtl", + "label": "Porkbun TTL", + "description": "Porkbun TTL.", + "schema": { + "type": "int", + "show_if": [ + [ + "provider", + "=", + "porkbun" + ] + ], + "default": 3600 + } + }, + { + "variable": "selfhostdeUsername", + "label": "Selfhost.de Username", + "description": "Selfhost.de Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "selfhost.de" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "selfhostdePassword", + "label": "Selfhost.de Password", + "description": "Selfhost.de Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "selfhost.de" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "selfhostdeProviderIP", + "label": "Selfhost.de Provider IP", + "description": "Selfhost.de Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "selfhost.de" + ] + ], + "default": false + } + }, + { + "variable": "servercowUsername", + "label": "Servercow Username", + "description": "Servercow Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "servercow" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "servercowPassword", + "label": "Servercow Password", + "description": "Servercow Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "servercow" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "servercowTtl", + "label": "Servercow TTL", + "description": "Servercow TTL.", + "schema": { + "type": "int", + "show_if": [ + [ + "provider", + "=", + "servercow" + ] + ], + "default": 120 + } + }, + { + "variable": "servercowProviderIP", + "label": "Servercow Provider IP", + "description": "Servercow Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "servercow" + ] + ], + "default": false + } + }, + { + "variable": "spdynToken", + "label": "Spdyn.de Token", + "description": "Spdyn.de Token.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "spdyn" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "spdynUsername", + "label": "Spdyn.de Username", + "description": "Spdyn.de Username.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "spdyn" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "spdynPassword", + "label": "Spdyn.de Password", + "description": "Spdyn.de Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "spdyn" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "spdynProviderIP", + "label": "Spdyn.de Provider IP", + "description": "Spdyn.de Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "spdyn" + ] + ], + "default": false + } + }, + { + "variable": "stratoPassword", + "label": "Strato Password", + "description": "Strato Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "strato" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "stratoProviderIP", + "label": "Strato Provider IP", + "description": "Strato Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "strato" + ] + ], + "default": false + } + }, + { + "variable": "variomediaPassword", + "label": "Variomedia Password", + "description": "Variomedia Password.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "variomedia" + ] + ], + "required": true, + "private": true, + "empty": false + } + }, + { + "variable": "variomediaEmail", + "label": "Variomedia Email", + "description": "Variomedia Email.", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "variomedia" + ] + ], + "required": true, + "empty": false + } + }, + { + "variable": "variomediaProviderIP", + "label": "Variomedia Provider IP", + "description": "Variomedia Provider IP.", + "schema": { + "type": "boolean", + "show_if": [ + [ + "provider", + "=", + "variomedia" + ] + ], + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "period", + "label": "Update Period", + "description": "Default period of IP address check, following this format:
\n5m = 5 minutes
\n1h = 1 hour
\n1h30m = 1 hour 30 minutes\n", + "schema": { + "type": "string", + "default": "5m", + "required": true + } + }, + { + "variable": "updateCooldownPeriod", + "label": "Update Cooldown Period", + "description": "Duration to cooldown between updates for each record.\nThis is useful to avoid being rate limited or banned,\nfollowing this format:
\n5m = 5 minutes
\n1h = 1 hour
\n1h30m = 1 hour 30 minutes\n", + "schema": { + "type": "string", + "default": "5m", + "required": true + } + }, + { + "variable": "backupPeriod", + "label": "Backup Period", + "description": "Set to a period to enable zip backups of data/config.json and\ndata/updates.json in a zip file following this format:
\n0 = disabled
\n10h = 10 hours
\n20h30m = 20 hours 30 minutes\n", + "schema": { + "type": "string", + "default": "24h", + "required": true + } + }, + { + "variable": "httpTimeout", + "label": "HTTP Timeout", + "description": "Default timeout for HTTP requests, following this format:
\n10s = 10 seconds
\n1m = 1 minute
\n1m30s = 1 minute 30 seconds\n", + "schema": { + "type": "string", + "default": "10s", + "required": true + } + }, + { + "variable": "publicIpDnsTimeout", + "label": "Public IP DNS Timeout", + "description": "Public IP DNS query timeout, following this format:
\n3s = 3 seconds
\n1m = 1 minute
\n1m30s = 1 minute 30 seconds\n", + "schema": { + "type": "string", + "default": "3s", + "required": true + } + }, + { + "variable": "shoutrrrAddresses", + "label": "Shoutrrr Addresses", + "description": "List of Shoutrrr addresses to send notifications to.
\nSee https://containrrr.dev/shoutrrr/0.7/services/overview/ for more information.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "address", + "label": "Address", + "schema": { + "type": "string", + "required": true, + "empty": false + } + } + ] + } + }, + { + "variable": "publicIpDnsProviders", + "label": "Public IP DNS Providers", + "description": "Providers to obtain the public IP address (IPv4 and/or IPv6)", + "schema": { + "type": "list", + "min": 1, + "required": true, + "empty": false, + "default": [ + { + "provider": "all", + "placeholder": "placeholder" + } + ], + "items": [ + { + "variable": "publicIpDnsProviderEntry", + "label": "Public IP DNS Provider Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "provider", + "label": "Provider", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "all", + "description": "All providers" + }, + { + "value": "google", + "description": "Google" + }, + { + "value": "cloudflare", + "description": "Cloudflare" + } + ] + } + }, + { + "variable": "placeholder", + "label": "placeholder", + "schema": { + "type": "string", + "default": "placeholder", + "required": true, + "hidden": true + } + } + ] + } + } + ] + } + }, + { + "variable": "publicIpHttpProviders", + "label": "Public IP HTTP Providers", + "description": "Providers to obtain the public IP address (IPv4 and/or IPv6)", + "schema": { + "type": "list", + "min": 1, + "required": true, + "empty": false, + "default": [ + { + "provider": "all", + "custom": "" + } + ], + "items": [ + { + "variable": "publicIpHttpProviderEntry", + "label": "Public IP HTTP Provider Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "provider", + "label": "Provider", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "all", + "description": "All providers" + }, + { + "value": "opendns", + "description": "opendns" + }, + { + "value": "ifconfig", + "description": "ifconfig" + }, + { + "value": "ipinfo", + "description": "ipinfo" + }, + { + "value": "ddnss", + "description": "ddnss" + }, + { + "value": "google", + "description": "google" + }, + { + "value": "custom", + "description": "Custom Provider" + } + ] + } + }, + { + "variable": "custom", + "label": "Custom Value", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "custom" + ] + ], + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "publicIpv4HttpProviders", + "label": "Public IPv4 HTTP Providers", + "description": "Providers to obtain the public IPv4 address", + "schema": { + "type": "list", + "min": 1, + "required": true, + "empty": false, + "default": [ + { + "provider": "all", + "custom": "" + } + ], + "items": [ + { + "variable": "publicIpv4HttpProviderEntry", + "label": "Public IPv4 HTTP Provider Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "provider", + "label": "Provider", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "all", + "description": "All providers" + }, + { + "value": "ipify", + "description": "ipify" + }, + { + "value": "noip", + "description": "noip" + }, + { + "value": "custom", + "description": "Custom Provider" + } + ] + } + }, + { + "variable": "custom", + "label": "Custom Value", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "custom" + ] + ], + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "publicIpv6HttpProviders", + "label": "Public IPv6 HTTP Providers", + "description": "Providers to obtain the public IPv6 address", + "schema": { + "type": "list", + "min": 1, + "required": true, + "empty": false, + "default": [ + { + "provider": "all", + "custom": "" + } + ], + "items": [ + { + "variable": "publicIpv6HttpProviderEntry", + "label": "Public IPv6 HTTP Provider Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "provider", + "label": "Provider", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "all", + "description": "All providers" + }, + { + "value": "ipify", + "description": "ipify" + }, + { + "value": "noip", + "description": "noip" + }, + { + "value": "custom", + "description": "Custom Provider" + } + ] + } + }, + { + "variable": "custom", + "label": "Custom Value", + "schema": { + "type": "string", + "show_if": [ + [ + "provider", + "=", + "custom" + ] + ], + "default": "", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "publicIpFetchers", + "label": "Public IP Fetchers", + "description": "Fetcher types to obtain the public IP address", + "schema": { + "type": "list", + "min": 1, + "required": true, + "empty": false, + "default": [ + { + "provider": "all", + "placeholder": "placeholder" + } + ], + "items": [ + { + "variable": "publicIpFetcherEntry", + "label": "Public IP Fetcher Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "provider", + "label": "Fetcher", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "all", + "description": "All providers" + }, + { + "value": "http", + "description": "HTTP" + }, + { + "value": "dns", + "description": "DNS" + } + ] + } + }, + { + "variable": "placeholder", + "label": "placeholder", + "schema": { + "type": "string", + "default": "placeholder", + "required": true, + "hidden": true + } + } + ] + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for DDNS Updater.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ddnsRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that DDNS Updater will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that DDNS Updater will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "ddnsNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the DDNS Updater Web UI.", + "schema": { + "type": "int", + "default": 30007, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "ddnsStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "DDNS Updater Data Storage", + "description": "The path to store DDNS Updater Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for DDNS Updater.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for DDNS Updater.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

DDNS Updater

\n

DDNS Updater is a lightweight universal DDNS Updater with web UI

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the DDNS Updater directories.\nAfterward, the DDNS Updater container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

DDNS Updater

\n

DDNS Updater is a lightweight universal DDNS Updater with web UI

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the DDNS Updater directories.\nAfterward, the DDNS Updater container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/deluge/app_versions.json b/community/deluge/app_versions.json new file mode 100644 index 0000000000..57a9d99bfd --- /dev/null +++ b/community/deluge/app_versions.json @@ -0,0 +1,695 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/deluge/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "9.5.3_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "deluge", + "description": "Deluge is a lightweight, Free Software, cross-platform BitTorrent client.", + "annotations": { + "title": "Deluge" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "9.5.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://deluge-torrent.org", + "icon": "https://media.sys.truenas.net/apps/deluge/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/linuxserver/deluge", + "https://github.com/truenas/charts/tree/master/community/deluge", + "https://deluge-torrent.org/" + ], + "keywords": [ + "torrent", + "download" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Deluge requires root privileges to start the Deluge process" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Deluge is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Deluge is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Deluge is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Deluge is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Deluge is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Deluge Configuration", + "description": "Configure Deluge" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Deluge" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Deluge" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Deluge" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Deluge" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Deluge Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "delugeConfig", + "label": "", + "group": "Deluge Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Deluge.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "delugeID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "he user id that Deluge files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Deluge files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "delugeNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Deluge Web UI.
\n(The internal port is always 8112)\n", + "schema": { + "type": "int", + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "default": 30038, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "exposeDaemon", + "label": "Expose Daemon Port", + "description": "Expose the Deluge Daemon port", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ] + } + }, + { + "variable": "daemonPort", + "label": "Daemon Port", + "description": "The port for the Deluge Daemon.
\n(Internal port is always 58846)\n", + "schema": { + "type": "int", + "show_if": [ + [ + "exposeDaemon", + "=", + true + ] + ], + "default": 58846, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "torrentPort", + "label": "Torrent Port", + "description": "The port for the Deluge Torrent.
\nApplies to both TCP and UDP.\n", + "schema": { + "type": "int", + "default": 30039, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "delugeStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Deluge Config Storage", + "description": "The path to store Deluge Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "downloads", + "label": "Deluge Downloads Storage", + "description": "The path to store Deluge Downloads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "downloads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Deluge.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Deluge.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Deluge.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Deluge

\n

Deluge is a lightweight, Free Software, cross-platform BitTorrent client.

", + "detailed_readme": "

Deluge

\n

Deluge is a lightweight, Free Software, cross-platform BitTorrent client.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/distribution/app_versions.json b/community/distribution/app_versions.json new file mode 100644 index 0000000000..33ad0bb1d5 --- /dev/null +++ b/community/distribution/app_versions.json @@ -0,0 +1,588 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/distribution/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "2.8.3_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "distribution", + "description": "Distribution is a toolkit to pack, ship, store, and deliver container content", + "annotations": { + "title": "Distribution" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "2.8.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/distribution/distribution", + "icon": "https://media.sys.truenas.net/apps/distribution/icons/icon.svg", + "sources": [ + "https://hub.docker.com/_/registry", + "https://distribution.github.io/distribution/", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/distribution", + "https://github.com/distribution/distribution" + ], + "keywords": [ + "container", + "registry" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "distribution", + "groupName": "distribution", + "gid": 568, + "uid": 568, + "description": "Distribution can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Distribution Configuration", + "description": "Configure Distribution" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Distribution" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Distribution" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Distribution" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Distribution" + } + ], + "questions": [ + { + "variable": "distributionConfig", + "label": "", + "group": "Distribution Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "basicAuthUsers", + "label": "Basic Auth Users", + "description": "Configure basic auth users for Distribution.
\nLeave empty to disable basic auth.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "userEntry", + "label": "User Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "Username", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "pass", + "label": "Password", + "schema": { + "type": "string", + "required": true, + "private": true + } + } + ] + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Distribution.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "distributionRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Distribution will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Distribution will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "distributionNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "apiPort", + "label": "API Port", + "description": "The port for the Distribution API.", + "schema": { + "type": "int", + "default": 30095, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Distribution.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "distributionStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "useFilesystemBackend", + "label": "Use Filesystem Backend", + "description": "Use filesystem backend for Distribution.
\nIf disabled, you will need to configure a backend for Distribution.
\nEither with environment variables or with a configuration file.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "data", + "label": "Distribution Data Storage", + "description": "The path to store Distribution data.", + "schema": { + "type": "dict", + "show_if": [ + [ + "useFilesystemBackend", + "=", + true + ] + ], + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Distribution.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Distribution.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Distribution.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Distribution

\n

Distribution is a toolkit to pack, ship, store, and deliver container content

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Distribution directories.\nAfterward, the Distribution container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Distribution

\n

Distribution is a toolkit to pack, ship, store, and deliver container content

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Distribution directories.\nAfterward, the Distribution container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/drawio/app_versions.json b/community/drawio/app_versions.json new file mode 100644 index 0000000000..5f8c9f635d --- /dev/null +++ b/community/drawio/app_versions.json @@ -0,0 +1,450 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/drawio/1.1.2", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "22.0.8_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "drawio", + "description": "Draw.io is a whiteboarding / diagramming software application.", + "annotations": { + "title": "Draw.IO" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "22.0.8", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.drawio.com", + "icon": "https://media.sys.truenas.net/apps/drawio/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/jgraph/drawio", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/drawio", + "https://github.com/jgraph/drawio" + ], + "keywords": [ + "diagram", + "whiteboard" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "drawio", + "groupName": "drawio", + "gid": 1000, + "uid": 999, + "description": "Draw.IO can run as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Draw.io Configuration", + "description": "Configure Draw.io" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Draw.io" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Draw.io" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Draw.io" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "drawioConfig", + "label": "", + "group": "Draw.io Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Draw.io.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "drawioNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "httpPort", + "label": "HTTP Port", + "description": "The HTTP port for the Draw.io Web UI.\nYou have to append [/?offline=1&https=0] to the URL\n", + "schema": { + "type": "int", + "default": 30090, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "httpsPort", + "label": "HTTPS Port", + "description": "The HTTPS port for the Draw.io Web UI.\nYou have to append [/?offline=1] to the URL\n", + "schema": { + "type": "int", + "default": 30091, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "drawioStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Draw.io.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Draw.io.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Draw.io.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Draw.io

\n

Draw.io is a whiteboarding / diagramming software application.

", + "detailed_readme": "

Draw.io

\n

Draw.io is a whiteboarding / diagramming software application.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/filebrowser/app_versions.json b/community/filebrowser/app_versions.json new file mode 100644 index 0000000000..32e332e670 --- /dev/null +++ b/community/filebrowser/app_versions.json @@ -0,0 +1,554 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/filebrowser/1.1.2", + "last_update": "2023-11-03 10:53:23", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "2.26.0_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "filebrowser", + "description": "File Browser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files.", + "annotations": { + "title": "File Browser" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "2.26.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://filebrowser.org", + "icon": "https://media.sys.truenas.net/apps/filebrowser/icons/icon.png", + "sources": [ + "https://github.com/filebrowser/filebrowser", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/filebrowser", + "https://hub.docker.com/r/filebrowser/filebrowser" + ], + "keywords": [ + "files", + "browser" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "filebrowser", + "groupName": "filebrowser", + "gid": 568, + "uid": 568, + "description": "Filebrowser can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Filebrowser Configuration", + "description": "Configure Filebrowser" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Filebrowser" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Filebrowser" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Filebrowser" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Filebrowser" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "filebrowserConfig", + "label": "", + "group": "Filebrowser Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Filebrowser.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "filebrowserRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Filebrowser will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Filebrowser will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "filebrowserNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Filebrowser Web UI.", + "schema": { + "type": "int", + "default": 30044, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Filebrowser.\n", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "filebrowserStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Filebrowser Config Storage", + "description": "The path to store Filebrowser Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Filebrowser.", + "schema": { + "type": "list", + "default": [ + { + "type": "hostPath", + "mountPath": "/my_data", + "hostPath": "" + } + ], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Filebrowser.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Filebrowser.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Filebrowser

\n

Filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Filebrowser directories.\nAfterward, the Filebrowser container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

You can configure further the settings by using Environment Variables.\nSee Filebrowser Documentation for more information.\nUse the format FB_OPTION_NAME where the option name is the name of the option you want to set.

\n

You can also edit the configuration file /config/filebrowser.json.

\n

Note that the following options are already set and will always take precedence\nover the environment variables and the configuration file:

\n\n

Also when a certificate is selected

\n", + "detailed_readme": "

Filebrowser

\n

Filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Filebrowser directories.\nAfterward, the Filebrowser container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

You can configure further the settings by using Environment Variables.\nSee Filebrowser Documentation for more information.\nUse the format FB_OPTION_NAME where the option name is the name of the option you want to set.

\n

You can also edit the configuration file /config/filebrowser.json.

\n

Note that the following options are already set and will always take precedence\nover the environment variables and the configuration file:

\n\n

Also when a certificate is selected

\n", + "changelog": null + } +} \ No newline at end of file diff --git a/community/firefly-iii/app_versions.json b/community/firefly-iii/app_versions.json new file mode 100644 index 0000000000..cf6467b879 --- /dev/null +++ b/community/firefly-iii/app_versions.json @@ -0,0 +1,550 @@ +{ + "1.0.11": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/firefly-iii/1.0.11", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "6.0.30_1.0.11", + "version": "1.0.11", + "chart_metadata": { + "name": "firefly-iii", + "description": "Firefly III is a personal finances manager", + "annotations": { + "title": "Firefly III" + }, + "type": "application", + "version": "1.0.11", + "apiVersion": "v2", + "appVersion": "6.0.30", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://www.firefly-iii.org/", + "icon": "https://media.sys.truenas.net/apps/firefly-iii/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/fireflyiii/core/", + "https://github.com/truenas/charts/tree/master/community/firefly-iii", + "https://github.com/firefly-iii/firefly-iii" + ], + "keywords": [ + "finance" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Firefly III runs as root user" + }, + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Firefly III Data Importer runs as root user" + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + }, + { + "userName": "redis", + "groupName": "redis", + "gid": 1001, + "uid": 0, + "description": "Redis runs as a non-root user and root group." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Firefly III and Firefly Data Importer is able to chown files." + }, + { + "name": "FOWNER", + "description": "Firefly III and Firefly Data Importer is able to bypass permission checks." + }, + { + "name": "SETUID", + "description": "Firefly III and Firefly Data Importer is able to set user ID for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Firefly III and Firefly Data Importer is able to set group ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Firefly III Configuration", + "description": "Configure Firefly III" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Firefly III" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Firefly III" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Firefly III" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "fireflyConfig", + "label": "", + "group": "Firefly III Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "appUrl", + "label": "Firefly III URL", + "description": "The base URL for Firefly III.
\nExamples:
\nhttps://firefly.example.com
\nhttp://192.168.1.100:30064\n", + "schema": { + "type": "uri", + "default": "", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Firefly III.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "enableImporter", + "label": "Enable Firefly III Data Importer", + "description": "Enable Firefly III Data Importer.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalImporterEnvs", + "label": "Additional Data Importer Environment Variables", + "description": "Configure additional environment variables for Firefly III Data Importer.", + "schema": { + "type": "list", + "show_if": [ + [ + "enableImporter", + "=", + true + ] + ], + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "fireflyNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Firefly III WebUI.", + "schema": { + "type": "int", + "default": 30064, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "importerPort", + "label": "Data Importer Port", + "description": "The port for the Firefly III Data Importer WebUI.", + "schema": { + "type": "int", + "default": 30065, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "fireflyStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "uploads", + "label": "Firefly III Uploads Storage", + "description": "The path to store Firefly III uploads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "uploads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Firefly III Postgres Data Storage", + "description": "The path to store Firefly III Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Firefly III Postgres Backup Storage", + "description": "The path to store Firefly III Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Firefly III.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Firefly III.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Firefly III

\n

Firefly III is a personal finances manager

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "detailed_readme": "

Firefly III

\n

Firefly III is a personal finances manager

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/flame/app_versions.json b/community/flame/app_versions.json new file mode 100644 index 0000000000..ff0a351c35 --- /dev/null +++ b/community/flame/app_versions.json @@ -0,0 +1,519 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/flame/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2.3.1_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "flame", + "description": "Flame is a self-hosted start page for your server.", + "annotations": { + "title": "Flame" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "2.3.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/pawelmalak/flame", + "icon": "https://media.sys.truenas.net/apps/flame/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/pawelmalak/flame", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/flame", + "https://github.com/pawelmalak/flame" + ], + "keywords": [ + "startpage" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Flame runs as a root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Flame is able to chown files." + }, + { + "name": "FOWNER", + "description": "Flame is able to bypass permission checks." + }, + { + "name": "DAC_OVERRIDE", + "description": "Flame is able to bypass permission checks." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Flame Configuration", + "description": "Configure Flame" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Flame" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Flame" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Flame" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Flame" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "flameConfig", + "label": "", + "group": "Flame Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "password", + "label": "Password", + "description": "The password to use for Flame.", + "schema": { + "type": "string", + "default": "", + "private": true, + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Flame.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "flameNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Flame Web UI.", + "schema": { + "type": "int", + "default": 30082, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "flameStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Flame Data Storage", + "description": "The path to store Flame Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Flame.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Flame.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Flame.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Flame

\n

Flame is a self-hosted start page for your server.

", + "detailed_readme": "

Flame

\n

Flame is a self-hosted start page for your server.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/freshrss/app_versions.json b/community/freshrss/app_versions.json new file mode 100644 index 0000000000..a77e7b9c75 --- /dev/null +++ b/community/freshrss/app_versions.json @@ -0,0 +1,782 @@ +{ + "1.0.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/freshrss/1.0.2", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.22.1_1.0.2", + "version": "1.0.2", + "chart_metadata": { + "name": "freshrss", + "description": "FreshRSS is a free, self-hostable news aggregator", + "annotations": { + "title": "FreshRSS" + }, + "type": "application", + "version": "1.0.2", + "apiVersion": "v2", + "appVersion": "1.22.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://freshrss.org/", + "icon": "https://media.sys.truenas.net/apps/freshrss/icons/icon.png", + "sources": [ + "https://github.com/FreshRSS/FreshRSS", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/freshrss", + "https://hub.docker.com/r/freshrss/freshrss" + ], + "keywords": [ + "rss", + "news" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "FreshRSS runs as root user" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "FreshRSS is able to chown files." + }, + { + "name": "SETGID", + "description": "FreshRSS is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "FreshRSS is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "FreshRSS Configuration", + "description": "Configure FreshRSS" + }, + { + "name": "Network Configuration", + "description": "Configure Network for FreshRSS" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for FreshRSS" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for FreshRSS" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "FreshRSS Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "freshrssConfig", + "label": "", + "group": "FreshRSS Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "defaultAdmin", + "label": "Default Admin Username", + "description": "The default admin username for FreshRSS.", + "schema": { + "type": "string", + "default": "", + "required": true, + "immutable": true + } + }, + { + "variable": "defaultAdminPass", + "label": "Default Admin Password", + "description": "The default admin password for FreshRSS.", + "schema": { + "type": "string", + "default": "", + "required": true, + "immutable": true, + "private": true + } + }, + { + "variable": "enableCron", + "label": "Enable Cron", + "description": "Enable cron for FreshRSS.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cronSchedule", + "label": "Cron Schedule", + "description": "The cron schedule for FreshRSS.
\nDefault: */20 * * * * (every 20 minutes)\n", + "schema": { + "type": "string", + "default": "*/20 * * * *", + "show_if": [ + [ + "enableCron", + "=", + true + ] + ], + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for FreshRSS.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "freshrssNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the FreshRSS Web UI.", + "schema": { + "type": "int", + "default": 31000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "freshrssStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "FreshRSS Data Storage", + "description": "The path to store FreshRSS Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "extensions", + "label": "FreshRSS Extensions Storage", + "description": "The path to store FreshRSS Extensions.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "extensions", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Postgres Data Storage", + "description": "The path to store Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Postgres Backup Storage", + "description": "The path to store Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for FreshRSS.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for FreshRSS.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for FreshRSS.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

FreshRSS

\n

FreshRSS is a free, self-hostable news aggregator

", + "detailed_readme": "

FreshRSS

\n

FreshRSS is a free, self-hostable news aggregator

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/frigate/app_versions.json b/community/frigate/app_versions.json new file mode 100644 index 0000000000..8a757b1b35 --- /dev/null +++ b/community/frigate/app_versions.json @@ -0,0 +1,729 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/frigate/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/gpuConfiguration" + ], + "human_version": "0.12.1_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "frigate", + "description": "Frigate is an NVR With Realtime Object Detection for IP Cameras", + "annotations": { + "title": "Frigate" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "0.12.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/blakeblackshear/frigate", + "icon": "https://media.sys.truenas.net/apps/frigate/icons/icon.svg", + "sources": [ + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/frigate", + "https://github.com/blakeblackshear/frigate" + ], + "keywords": [ + "camera", + "nvr" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Frigate runs as root user. When USB Bus is mounted, it is able to escalate privileges." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Frigate is able to chown files." + }, + { + "name": "FOWNER", + "description": "Frigate are able to bypass permission checks for it's sub-processes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Frigate is able to bypass permission checks." + }, + { + "name": "SETGID", + "description": "Frigate is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Frigate is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Frigate Configuration", + "description": "Configure Frigate" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Frigate" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Frigate" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Frigate" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "frigateConfig", + "label": "", + "group": "Frigate Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "mountUSBBus", + "label": "Mount USB Bus", + "description": "Mount the USB bus to the container.
\nThis is required if you want to use USB devices, like Coral
\nThis will mount the USB bus to /dev/bus/usb inside the container.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Frigate.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "frigateNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": false, + "subquestions": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Frigate Web UI.
\nInternal port: 5000\n", + "schema": { + "type": "int", + "default": 30058, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enableRtmp", + "label": "Enable RTMP", + "description": "Enable RTMP for Frigate.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "rtmpPort", + "label": "RTMP Port", + "description": "The RTMP port for Frigate.
\nInternal port: 1935\n", + "schema": { + "type": "int", + "default": 30059, + "show_if": [ + [ + "enableRtmp", + "=", + true + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enableRtsp", + "label": "Enable RTSP", + "description": "Enable RTSP for Frigate.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "rtspPort", + "label": "RTSP Port", + "description": "The RTSP port for Frigate.
\nInternal port: 8554\n", + "schema": { + "type": "int", + "default": 30060, + "show_if": [ + [ + "enableRtsp", + "=", + true + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enableWebRtc", + "label": "Enable WebRTC", + "description": "Enable WebRTC for Frigate.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webRtcPort", + "label": "WebRTC Port", + "description": "The WebRTC port for Frigate.
\nInternal port: 8555
\nApplies to both TCP and UDP.\n", + "schema": { + "type": "int", + "default": 30061, + "show_if": [ + [ + "enableWebRtc", + "=", + true + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "frigateStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Frigate Config Storage", + "description": "The path to store Frigate Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "media", + "label": "Frigate Media Storage", + "description": "The path to store Frigate Media.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "cache", + "label": "Frigate Cache Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "sizeGiB", + "label": "Size (GiB)", + "description": "The size of RAM is allowed to Frigate to use as cache", + "schema": { + "type": "int", + "max": 4, + "default": 1, + "required": true + } + } + ] + } + }, + { + "variable": "shm", + "label": "Frigate /dev/shm Storage", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "sizeMiB", + "label": "Size (MiB)", + "description": "The size of RAM is allowed to Frigate to use as /dev/shm
\nhttps://docs.frigate.video/frigate/installation/#calculating-required-shm-size\n", + "schema": { + "type": "int", + "max": 2048, + "default": 64, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Frigate.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Frigate.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Frigate.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "frigateGPU", + "group": "Resources Configuration", + "label": "GPU Configuration", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + } + ] + }, + "app_readme": "

Frigate

\n

Frigate is an NVR With Realtime Object Detection for IP Cameras

\n
\n

Note: m.2 Coral TPU devices is not supported.

\n
", + "detailed_readme": "

Frigate

\n

Frigate is an NVR With Realtime Object Detection for IP Cameras

\n
\n

Note: m.2 Coral TPU devices is not supported.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/fscrawler/app_versions.json b/community/fscrawler/app_versions.json new file mode 100644 index 0000000000..ffd8f2cf9e --- /dev/null +++ b/community/fscrawler/app_versions.json @@ -0,0 +1,569 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/fscrawler/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2.9_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "fscrawler", + "description": "FSCrawler is a crawler that helps to index binary documents such as PDF, Open Office, MS Office.", + "annotations": { + "title": "FSCrawler" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "2.9", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://fscrawler.readthedocs.io/", + "icon": "https://localhost/no-icon", + "sources": [ + "https://github.com/dadoonet/fscrawler", + "https://github.com/truenas/charts/tree/master/community/fscrawler", + "https://hub.docker.com/r/dadoonet/fscrawler", + "https://fscrawler.readthedocs.io/" + ], + "keywords": [ + "index", + "crawler" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "FSCrawler runs as a root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "FSCrawler Configuration", + "description": "Configure FSCrawler" + }, + { + "name": "Network Configuration", + "description": "Configure Network for FSCrawler" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for FSCrawler" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for FSCrawler" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "FSCrawler Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "fscrawlerConfig", + "label": "", + "group": "FSCrawler Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "imageSelector", + "label": "Image", + "description": "The image to use for FSCrawler.
\nImages with OCR support are a lot larger than images without OCR support.
\nApproximate image sizes:
\n- With OCR Support: 1.2GB
\n- Without OCR Support: 0.5GB\n", + "schema": { + "type": "string", + "default": "ocrImage", + "required": true, + "enum": [ + { + "value": "ocrImage", + "description": "With OCR Support - Elasticsearch 7 and 8" + }, + { + "value": "noocrImage", + "description": "Without OCR Support - Elasticsearch 7 and 8" + } + ] + } + }, + { + "variable": "jobName", + "label": "Job Name", + "description": "The name of the FSCrawler job to run.
\nA _settings.yaml file in the directory named after the job name will have to be manually created.\n", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "loop", + "label": "Loop", + "description": "The number of times to run the job.
\nhttps://fscrawler.readthedocs.io/en/latest/admin/cli-options.html#loop
\n-1 means run forever.
\n0 means never run.
\n", + "schema": { + "type": "int", + "default": -1, + "required": true, + "min": -1 + } + }, + { + "variable": "restart", + "label": "Restart", + "description": "Restart the job from the beginning.
\nhttps://fscrawler.readthedocs.io/en/latest/admin/cli-options.html#restart\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for FSCrawler.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "fscrawlerNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enableRestApiService", + "label": "Enable Rest API Service", + "description": "Enable Rest API Service for FSCrawler.
\nhttps://fscrawler.readthedocs.io/en/latest/admin/fs/rest.html
\nAdditional configuration is needed in the job file. Check the Notes card\nafter installation for more information.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "restPort", + "label": "Rest Port", + "description": "The port to use for the Rest API Service.", + "schema": { + "type": "int", + "show_if": [ + [ + "enableRestApiService", + "=", + true + ] + ], + "default": 30084, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "fscrawlerStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "jobs", + "label": "FSCrawler Jobs Storage", + "description": "The path to store FSCrawler Jobs.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "jobs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for FSCrawler.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for FSCrawler.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for FSCrawler.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

FSCrawler

\n

FSCrawler is a crawler that helps to index binary documents such as PDF, Open Office, MS Office.

", + "detailed_readme": "

FSCrawler

\n

FSCrawler is a crawler that helps to index binary documents such as PDF, Open Office, MS Office.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/gitea/app_versions.json b/community/gitea/app_versions.json new file mode 100644 index 0000000000..6d2d354c0e --- /dev/null +++ b/community/gitea/app_versions.json @@ -0,0 +1,590 @@ +{ + "1.0.22": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/gitea/1.0.22", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "1.20.5_1.0.22", + "version": "1.0.22", + "chart_metadata": { + "name": "gitea", + "description": "Gitea - Git with a cup of tea", + "annotations": { + "title": "Gitea" + }, + "type": "application", + "version": "1.0.22", + "apiVersion": "v2", + "appVersion": "1.20.5", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://gitea.io/en-us", + "icon": "https://media.sys.truenas.net/apps/gitea/icons/icon.svg", + "sources": [ + "https://gitea.io/en-us", + "https://github.com/truenas/charts/tree/master/community/gitea", + "https://docs.gitea.io/en-us/install-with-docker-rootless" + ], + "keywords": [ + "git", + "gitea" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "gitea", + "groupName": "gitea", + "gid": 1000, + "uid": 1000, + "description": "Gitea can run as a non-root user, currently only 1000 works." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Gitea Configuration", + "description": "Configure Gitea" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Gitea" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Gitea" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Gitea" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Gitea" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "giteaConfig", + "label": "", + "group": "Gitea Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Gitea.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "giteaRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Gitea will run as.", + "schema": { + "type": "int", + "min": 568, + "hidden": true, + "editable": false, + "default": 1000, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Gitea will run as.", + "schema": { + "type": "int", + "min": 568, + "hidden": true, + "editable": false, + "default": 1000, + "required": true + } + } + ] + } + }, + { + "variable": "giteaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Gitea WebUI.", + "schema": { + "type": "int", + "default": 30008, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "sshPort", + "label": "SSH Port", + "description": "The port for the Gitea SSH.", + "schema": { + "type": "int", + "default": 30009, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "rootURL", + "label": "Root URL", + "description": "The URL that Gitea will be available at.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Gitea\n", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "giteaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Gitea Data Storage", + "description": "The path to store Gitea data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "config", + "label": "Gitea Configuration Storage", + "description": "The path to store Gitea configuration storage.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Gitea Postgres Data Storage", + "description": "The path to store Gitea Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Gitea Postgres Backup Storage", + "description": "The path to store Gitea Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Gitea.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Gitea.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Gitea

\n

Gitea - Git with a cup of tea

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the gitea directories.\nAfterward, the gitea container will run as a non-root user (Default: 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the gitea and postgres data directories.

\n
\n

On initial startup a setup wizard will be launched with settings for database, ports, path, and domain prefilled.\nKeep them as they are, fill anything you want in the optional settings section and click on Install Gitea.

", + "detailed_readme": "

Gitea

\n

Gitea - Git with a cup of tea

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the gitea directories.\nAfterward, the gitea container will run as a non-root user (Default: 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the gitea and postgres data directories.

\n
\n

On initial startup a setup wizard will be launched with settings for database, ports and root url prefilled.\nKeep them as they are, fill the Administration section and click on Install Gitea.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/grafana/app_versions.json b/community/grafana/app_versions.json new file mode 100644 index 0000000000..7d441472c0 --- /dev/null +++ b/community/grafana/app_versions.json @@ -0,0 +1,586 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/grafana/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "10.2.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "grafana", + "description": "Grafana is the open source analytics & monitoring solution for every database.", + "annotations": { + "title": "Grafana" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "10.2.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://grafana.com", + "icon": "https://media.sys.truenas.net/apps/grafana/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/grafana/grafana", + "https://github.com/truenas/charts/tree/master/community/grafana", + "https://github.com/grafana" + ], + "keywords": [ + "dashboard", + "monitoring", + "analytics", + "metrics" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "grafana", + "groupName": "grafana", + "gid": 568, + "uid": 568, + "description": "Grafana can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Grafana Configuration", + "description": "Configure Grafana" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Grafana" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Grafana" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Grafana" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Grafana" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "grafanaConfig", + "label": "", + "group": "Grafana Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "plugins", + "label": "Grafana Plugins", + "description": "Configure Grafana plugins to install.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "plugin", + "label": "Plugin", + "description": "The plugin name to install.
\nExample: grafana-piechart-panel
\nExample: grafana-clock-panel 1.0.0\n", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Grafana.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "grafanaRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Grafana will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Grafana will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "grafanaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Grafana Web UI.", + "schema": { + "type": "int", + "default": 30037, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Grafana\n", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "rootURL", + "label": "Root URL", + "description": "The root URL for Grafana
\nThe URL you use to access Grafana
\nExample: https://grafana.example.com:30037
\nExample: https://192.168.1.100:30037
\n", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateID", + "!=", + null + ] + ], + "default": "" + } + } + ] + } + }, + { + "variable": "grafanaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Grafana Data Storage", + "description": "The path to store Grafana Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Grafana.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Grafana.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Grafana.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Grafana

\n

Grafana is the open source analytics & monitoring solution for every database.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Grafana directories.\nAfterward, the Grafana container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

Additional configuration can be made by adding additional environment variables\nHere is the available configuration documentation

\n

Use the following syntax:\nGF_<SECTION-NAME>_<KEY-NAME>

\n

Example:\nGF_SMTP_ENABLED

", + "detailed_readme": "

Grafana

\n

Grafana is the open source analytics & monitoring solution for every database.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Grafana directories.\nAfterward, the Grafana container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

Additional configuration can be made by adding additional environment variables\nHere is the available configuration documentation

\n

Use the following syntax:\nGF_<SECTION-NAME>_<KEY-NAME>

\n

Example:\nGF_SMTP_ENABLED

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/homarr/app_versions.json b/community/homarr/app_versions.json new file mode 100644 index 0000000000..bd9ca55087 --- /dev/null +++ b/community/homarr/app_versions.json @@ -0,0 +1,629 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/homarr/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "0.13.4_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "homarr", + "description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.", + "annotations": { + "title": "Homarr" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "0.13.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://homarr.dev/", + "icon": "https://media.sys.truenas.net/apps/homarr/icons/icon.svg", + "sources": [ + "https://homarr.dev/", + "https://github.com/truenas/charts/tree/master/community/homarr", + "https://github.com/ajnart/homarr" + ], + "keywords": [ + "dashboard" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "homarr", + "groupName": "homarr", + "gid": 568, + "uid": 568, + "description": "Homarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Homarr Configuration", + "description": "Configure Homarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Homarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Homarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Homarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Homarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Homarr Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "homarrConfig", + "label": "", + "group": "Homarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "password", + "label": "Password (Optional)", + "description": "Password for Homarr.", + "schema": { + "type": "string", + "default": "", + "private": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Homarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "homarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Homarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Homarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "homarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Homarr Web UI.", + "schema": { + "type": "int", + "default": 30052, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "homarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "configs", + "label": "Homarr Config Storage", + "description": "The path to store Homarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "configs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "icons", + "label": "Homarr Icon Storage", + "description": "The path to store Homarr Icons.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "icons", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Homarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Homarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Homarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Homarr

\n

Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Homarr directories.\nAfterward, the Homarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Homarr

\n

Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Homarr directories.\nAfterward, the Homarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/homepage/app_versions.json b/community/homepage/app_versions.json new file mode 100644 index 0000000000..9c11c27747 --- /dev/null +++ b/community/homepage/app_versions.json @@ -0,0 +1,491 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/homepage/1.1.2", + "last_update": "2023-11-01 15:12:25", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "0.7.4_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "homepage", + "description": "Homepage is a modern, secure, highly customizable application dashboard.", + "annotations": { + "title": "Homepage" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "0.7.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://gethomepage.dev/", + "icon": "https://media.sys.truenas.net/apps/homepage/icons/icon.png", + "sources": [ + "https://gethomepage.dev/", + "https://github.com/truenas/charts/tree/master/community/homepage", + "https://github.com/benphelps/homepage" + ], + "keywords": [ + "dashboard" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "homepage", + "groupName": "homepage", + "gid": 1000, + "uid": 1000, + "description": "Homepage runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Homepage Configuration", + "description": "Configure Homepage" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Homepage" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Homepage" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Homepage" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "homepageConfig", + "label": "", + "group": "Homepage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Homepage.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "homepageNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Homepage Web UI.", + "schema": { + "type": "int", + "default": 30054, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "homepageStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Homepage Config Storage", + "description": "The path to store Homepage Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Homepage.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Homepage.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Homepage.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Homepage

\n

Homepage is a modern, secure, highly customizable application dashboard.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Homepage directories.\nAfterward, the Homepage container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Homepage

\n

Homepage is a modern, secure, highly customizable application dashboard.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Homepage directories.\nAfterward, the Homepage container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/homer/app_versions.json b/community/homer/app_versions.json new file mode 100644 index 0000000000..95308c2afd --- /dev/null +++ b/community/homer/app_versions.json @@ -0,0 +1,537 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/homer/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "23.10.1_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "homer", + "description": "Homer is a dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.", + "annotations": { + "title": "Homer" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "23.10.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/bastienwirtz/homer", + "icon": "https://media.sys.truenas.net/apps/homer/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/b4bz/homer", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/homer", + "https://github.com/bastienwirtz/homer" + ], + "keywords": [ + "dashboard", + "homepage" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "homer", + "groupName": "homer", + "gid": 568, + "uid": 568, + "description": "Homer can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Homer Configuration", + "description": "Configure Homer" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Homer" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Homer" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Homer" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Homer" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "homerConfig", + "label": "", + "group": "Homer Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "initAssets", + "label": "Init Assets", + "description": "Install example configuration file & assets to help you get started.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Homer.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "homerRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Homer will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Homer will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "homerNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Homer Web UI.", + "schema": { + "type": "int", + "default": 30092, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "homerStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "assets", + "label": "Homer Assets Storage", + "description": "The path to store Homer Assets.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "assets", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Homer.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Homer.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Homer.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Homer

\n

Homer is a dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Homer directories.\nAfterward, the Homer container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Homer

\n

Homer is a dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Homer directories.\nAfterward, the Homer container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/immich/app_versions.json b/community/immich/app_versions.json new file mode 100644 index 0000000000..dab4ccd5bb --- /dev/null +++ b/community/immich/app_versions.json @@ -0,0 +1,772 @@ +{ + "1.0.34": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/immich/1.0.34", + "last_update": "2023-11-06 13:16:02", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone", + "definitions/gpuConfiguration" + ], + "human_version": "1.84.0_1.0.34", + "version": "1.0.34", + "chart_metadata": { + "name": "immich", + "description": "Immich", + "annotations": { + "title": "Immich" + }, + "type": "application", + "version": "1.0.34", + "apiVersion": "v2", + "appVersion": "1.84.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://immich.app", + "icon": "https://media.sys.truenas.net/apps/immich/icons/icon.svg", + "sources": [ + "https://immich.app", + "https://github.com/truenas/charts/tree/master/community/immich", + "https://github.com/immich-app/immich" + ], + "keywords": [ + "photos", + "backup" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Immich runs as root user in order to spawn different sub-processes." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Immich Proxy is able to chown files." + }, + { + "name": "SETUID", + "description": "Immich Proxy and Web is able to set user ID for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Immich Proxy and Web is able to set group ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Immich Configuration", + "description": "Configure Immich" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Immich" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Immich" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Immich" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Immich Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "immichConfig", + "label": "", + "group": "Immich Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "publicLoginMessage", + "label": "Public Login Message", + "description": "The message that will be displayed on the login page.\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "enableML", + "label": "Enable Machine Learning", + "description": "Enable Machine Learning\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "enableTypesense", + "label": "Enable Typesense", + "description": "Enable Typesense\n", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "immichNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webuiPort", + "label": "Web Port", + "description": "The port for the Immich WebUI.", + "schema": { + "type": "int", + "default": 30041, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "immichStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "uploads", + "label": "Immich Uploads Storage", + "description": "The path to store Immich uploads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "uploads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "library", + "label": "Immich Library Storage", + "description": "The path to store Immich library.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "library", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "thumbs", + "label": "Immich Thumbs Storage", + "description": "The path to store Immich Thumbs.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "thumbs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "profile", + "label": "Immich Profile Storage", + "description": "The path to store Immich Profile.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "profile", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "video", + "label": "Immich Video Storage", + "description": "The path to store Immich Video.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "video", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalLibraries", + "label": "Additional Libraries", + "description": "Additional libraries for Immich.
\nInternal mountPath will be the same as your hostPath
\nhttps://immich.app/docs/features/read-only-gallery\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Immich Postgres Data Storage", + "description": "The path to store Immich Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Immich Postgres Backup Storage", + "description": "The path to store Immich Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Immich.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Immich.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "immichGPU", + "group": "Resources Configuration", + "label": "GPU Configuration", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + } + ] + }, + "app_readme": "

Immich

\n

Immich - Self-hosted backup solution for photos and videos on mobile device

", + "detailed_readme": "

Immich

\n

Immich - Self-hosted backup solution for photos and videos on mobile device

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/ipfs/app_versions.json b/community/ipfs/app_versions.json new file mode 100644 index 0000000000..400c5fcd14 --- /dev/null +++ b/community/ipfs/app_versions.json @@ -0,0 +1,432 @@ +{ + "1.0.24": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/ipfs/1.0.24", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "v0.23.0_1.0.24", + "version": "1.0.24", + "chart_metadata": { + "name": "ipfs", + "description": "Interplanetary Filesystem - the Web3 standard for content-addressing, interoperable with HTTP", + "annotations": { + "title": "IPFS" + }, + "type": "application", + "version": "1.0.24", + "apiVersion": "v2", + "appVersion": "v0.23.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://ipfs.tech/", + "icon": "https://media.sys.truenas.net/apps/ipfs/icons/icon.png", + "sources": [ + "https://github.com/ipfs/kubo", + "https://github.com/truenas/charts/tree/master/community/ipfs", + "https://ipfs.tech/" + ], + "keywords": [ + "storage", + "ipfs", + "kubo" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "ipfs", + "groupName": "ipfs", + "gid": 568, + "uid": 568, + "description": "IPFS can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "IPFS Configuration", + "description": "Configure IPFS" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for IPFS" + }, + { + "name": "Network Configuration", + "description": "Configure Network for IPFS" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for IPFS" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for IPFS" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "ipfsConfig", + "label": "", + "group": "IPFS Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for IPFS.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ipfsRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that IPFS will run as.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that IPFS will run as.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "ipfsNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "apiPort", + "label": "API Port", + "description": "The port for the IPFS API (And WebUI).", + "schema": { + "type": "int", + "default": 30010, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "swarmPort", + "label": "Swarm Port", + "description": "The port for the IPFS Swarm. Both TCP and UDP", + "schema": { + "type": "int", + "default": 30011, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "gatewayPort", + "label": "Gateway Port", + "description": "The port for the IPFS Gateway.", + "schema": { + "type": "int", + "default": 30012, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "ipfsStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "IPFS Data Storage", + "description": "The path to store IPFS data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "staging", + "label": "IPFS Staging Storage", + "description": "The path to store IPFS staging storage.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "staging", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for IPFS.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for IPFS.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

IPFS

\n

Interplanetary Filesystem - the Web3 standard for content-addressing, interoperable with HTTP

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the ipfs directories.\nAfterward, the ipfs container will run as a non-root user (Default: 568).

\n
", + "detailed_readme": "

IPFS

\n

Interplanetary Filesystem - the Web3 standard for content-addressing, interoperable with HTTP

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the ipfs directories.\nAfterward, the ipfs container will run as a non-root user (Default: 568).

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/jellyfin/app_versions.json b/community/jellyfin/app_versions.json new file mode 100644 index 0000000000..43741561e5 --- /dev/null +++ b/community/jellyfin/app_versions.json @@ -0,0 +1,739 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/jellyfin/1.1.2", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume", + "definitions/gpuConfiguration" + ], + "human_version": "10.8.12_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "jellyfin", + "description": "Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.", + "annotations": { + "title": "Jellyfin" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "10.8.12", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://jellyfin.org/", + "icon": "https://media.sys.truenas.net/apps/jellyfin/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/jellyfin/jellyfin", + "https://github.com/truenas/charts/tree/master/community/jellyfin", + "https://jellyfin.org/" + ], + "keywords": [ + "media", + "streaming" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "jellyfin", + "groupName": "jellyfin", + "gid": 568, + "uid": 568, + "description": "Jellyfin runs as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Jellyfin Configuration", + "description": "Configure Jellyfin" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Jellyfin" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Jellyfin" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Jellyfin" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Jellyfin" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "jellyfinConfig", + "label": "", + "group": "Jellyfin Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "publishServerUrl", + "label": "Published Server URL", + "description": "Optional - The URL that Jellyfin will be advertised.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Jellyfin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "jellyfinRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Jellyfin will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Jellyfin will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "jellyfinNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. While it's recommended to keep this disabled.
\nIt's required for autodiscovery to work.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Jellyfin Web UI.", + "schema": { + "type": "int", + "default": 30013, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "jellyfinStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Jellyfin Config Storage", + "description": "The path to store Jellyfin Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "cache", + "label": "Jellyfin Cache Storage", + "description": "The path to store Jellyfin Cache.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "cache", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "transcodes", + "label": "Jellyfin Transcodes Storage", + "description": "The path to store Jellyfin Transcodes.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nemptyDir: Is a temporary directory that will be created on the disk or in memory.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "emptyDir", + "description": "emptyDir (Temporary directory created on the disk or in memory)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "transcodes", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + }, + { + "variable": "medium", + "label": "emptyDir Medium", + "description": "Disk: Creates a temporary directory on the disk.
\nMemory: Creates a temporary directory in memory.\n", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "default": "", + "enum": [ + { + "value": "", + "description": "Disk (Temporary directory created on the disk)" + }, + { + "value": "Memory", + "description": "Memory (Temporary directory created in memory)" + } + ] + } + }, + { + "variable": "size", + "label": "emptyDir Size Limit", + "description": "The maximum size of the temporary directory.
\nFor example: 2Gi\n", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "default": "2Gi" + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Jellyfin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Jellyfin.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Jellyfin.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "jellyfinGPU", + "group": "Resources Configuration", + "label": "GPU Configuration", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + } + ] + }, + "app_readme": "

Jellyfin

\n

Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyfin directories.\nAfterward, the Jellyfin container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Jellyfin

\n

Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyfin directories.\nAfterward, the Jellyfin container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/jellyseerr/app_versions.json b/community/jellyseerr/app_versions.json new file mode 100644 index 0000000000..c6b53a9267 --- /dev/null +++ b/community/jellyseerr/app_versions.json @@ -0,0 +1,362 @@ +{ + "1.0.10": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/jellyseerr/1.0.10", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.7.0_1.0.10", + "version": "1.0.10", + "chart_metadata": { + "name": "jellyseerr", + "description": "Jellyseerr is a free and open source software application for managing requests for your media library.", + "annotations": { + "title": "Jellyseerr" + }, + "type": "application", + "version": "1.0.10", + "apiVersion": "v2", + "appVersion": "1.7.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/Fallenbagel/jellyseerr", + "icon": "https://media.sys.truenas.net/apps/jellyseerr/icons/icon.svg", + "sources": [ + "https://github.com/Fallenbagel/jellyseerr", + "https://github.com/truenas/charts/tree/master/community/jellyseerr", + "https://hub.docker.com/r/fallenbagel/jellyseerr" + ], + "keywords": [ + "media" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "jellyseerr", + "groupName": "jellyseerr", + "gid": 568, + "uid": 568, + "description": "Jellyseerr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Jellyseerr Configuration", + "description": "Configure Jellyseerr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Jellyseerr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Jellyseerr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Jellyseerr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Jellyseerr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Jellyseerr Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "jellyseerrConfig", + "label": "", + "group": "Jellyseerr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Jellyseerr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "jellyseerrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Jellyseerr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Jellyseerr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "jellyseerrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Jellyseerr Web UI.", + "schema": { + "type": "int", + "default": 30042, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "jellyseerrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Jellyseerr Config Storage", + "description": "The path to store Jellyseerr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Jellyseerr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Jellyseerr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Jellyseerr

\n

Jellyseerr is a free and open source software application for managing requests for your media library.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyseerr directories.\nAfterward, the Jellyseerr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Jellyseerr

\n

Jellyseerr is a free and open source software application for managing requests for your media library.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyseerr directories.\nAfterward, the Jellyseerr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/jenkins/app_versions.json b/community/jenkins/app_versions.json new file mode 100644 index 0000000000..9e52125d62 --- /dev/null +++ b/community/jenkins/app_versions.json @@ -0,0 +1,627 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/jenkins/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/timezone" + ], + "human_version": "2.414.3_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "jenkins", + "description": "Jenkins is a leading open source automation server,", + "annotations": { + "title": "Jenkins" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "2.414.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.jenkins.io/", + "icon": "https://media.sys.truenas.net/apps/jenkins/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/jenkins/jenkins", + "https://github.com/truenas/charts/tree/master/community/jenkins", + "https://github.com/jenkinsci/jenkins", + "https://www.jenkins.io/" + ], + "keywords": [ + "automation", + "ci/cd" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "jenkins", + "groupName": "jenkins", + "gid": 1000, + "uid": 1000, + "description": "Jenkins runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Jenkins Configuration", + "description": "Configure Jenkins" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Jenkins" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Jenkins" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Jenkins" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Jenkins" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Jenkins Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "jenkinsConfig", + "label": "", + "group": "Jenkins Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "jenkinsJavaOpts", + "label": "Additional Jenkins Java Options", + "description": "Configure additional jenkins java options for Jenkins.
\nSee https://www.jenkins.io/doc/book/managing/system-properties\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "jenkinsJavaOpt", + "label": "Jenkins Java Option", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "property", + "label": "Property", + "description": "The property to set, see https://www.jenkins.io/doc/book/managing/system-properties
\nThe prefix [-D] is automatically added.\n", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "description": "The value to set for the property.
\n", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "jenkinsOpts", + "label": "Additional Jenkins Options", + "description": "Configure additional jenkins options for Jenkins.
\nsee https://www.jenkins.io/doc/book/installing/initial-settings\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "jenkinsOption", + "label": "Jenkins Option", + "description": "The option to set, see https://www.jenkins.io/doc/book/installing/initial-settings
\nThe prefix [--] is automatically added.\n", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Jenkins.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "jenkinsNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Jenkins Web UI.", + "schema": { + "type": "int", + "default": 30036, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for HTTPS.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "agent", + "label": "Enable Agent", + "description": "Enable Agent Port for Jenkins.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "agentPort", + "label": "Agent Port", + "description": "The port for the Jenkins Agent.", + "schema": { + "type": "int", + "show_if": [ + [ + "agent", + "=", + true + ] + ], + "default": 50000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "jenkinsStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "home", + "label": "Jenkins Home Storage", + "description": "The path to store Jenkins Home Directory.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "home", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Jenkins.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Jenkins.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Jenkins.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Jenkins

\n

Jenkins. The leading open source automation server, Jenkins provides hundreds of\nplugins to support building, deploying and automating any project.

\n
\n

When application is installed and on each startup, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jenkins directories.\nAfterward, the Jenkins container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the user and group (1000).

\n
", + "detailed_readme": "

Jenkins

\n

Jenkins. The leading open source automation server, Jenkins provides hundreds of\nplugins to support building, deploying and automating any project.

\n
\n

When application is installed and on each startup, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jenkins directories.\nAfterward, the Jenkins container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the user and group (1000).

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/joplin/app_versions.json b/community/joplin/app_versions.json new file mode 100644 index 0000000000..b1601d3dd1 --- /dev/null +++ b/community/joplin/app_versions.json @@ -0,0 +1,380 @@ +{ + "1.0.6": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/joplin/1.0.6", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2.13.3_1.0.6", + "version": "1.0.6", + "chart_metadata": { + "name": "joplin", + "description": "Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device", + "annotations": { + "title": "Joplin" + }, + "type": "application", + "version": "1.0.6", + "apiVersion": "v2", + "appVersion": "2.13.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://joplinapp.org/", + "icon": "https://media.sys.truenas.net/apps/joplin/icons/icon.png", + "sources": [ + "https://github.com/laurent22/joplin", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/joplin", + "https://hub.docker.com/r/joplin/server/" + ], + "keywords": [ + "notes" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "joplin", + "groupName": "joplin", + "gid": 1001, + "uid": 1001, + "description": "Joplin can run as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Joplin Configuration", + "description": "Configure Joplin" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Joplin" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Joplin" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Joplin" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "joplinConfig", + "label": "", + "group": "Joplin Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "baseUrl", + "label": "Base URL", + "description": "The base URL for Joplin.
\nExamples:
\nhttps://joplin.example.com\nhttp://192.168.1.100:30062\n", + "schema": { + "type": "uri", + "default": "", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Joplin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "joplinNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Joplin Web UI.", + "schema": { + "type": "int", + "default": 30062, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "joplinStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "pgData", + "label": "Joplin Postgres Data Storage", + "description": "The path to store Joplin Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Joplin Postgres Backup Storage", + "description": "The path to store Joplin Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Joplin.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Joplin.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Joplin

\n

Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "detailed_readme": "

Joplin

\n

Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/kapowarr/app_versions.json b/community/kapowarr/app_versions.json new file mode 100644 index 0000000000..32a0975bfb --- /dev/null +++ b/community/kapowarr/app_versions.json @@ -0,0 +1,664 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/kapowarr/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.0.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "kapowarr", + "description": "Kapowarr is a software to build and manage a comic book library, fitting in the *arr suite of software.", + "annotations": { + "title": "Kapowarr" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "1.0.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://casvt.github.io/Kapowarr/", + "icon": "https://media.sys.truenas.net/apps/kapowarr/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/mrcas/kapowarr", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/kapowarr", + "https://github.com/Casvt/Kapowarr" + ], + "keywords": [ + "media", + "comic" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "kapowarr", + "groupName": "kapowarr", + "gid": 568, + "uid": 568, + "description": "Kapowarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Kapowarr Configuration", + "description": "Configure Kapowarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Kapowarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Kapowarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Kapowarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Kapowarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "kapowarrConfig", + "label": "", + "group": "Kapowarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Kapowarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "kapowarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Kapowarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Kapowarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "kapowarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Kapowarr Web UI.", + "schema": { + "type": "int", + "default": 30071, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "kapowarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Kapowarr Config Storage", + "description": "The path to store Kapowarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "downloads", + "label": "Kapowarr Download Storage", + "description": "The path to store Kapowarr Downloads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "downloads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "content", + "label": "Kapowarr Content Storage", + "description": "The path to store Kapowarr Content.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "content", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Kapowarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Kapowarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Kapowarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Kapowarr

\n

Kapowarr is a software to build and manage a comic book library, fitting in the *arr suite of software.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Kapowarr directories.\nAfterward, the Kapowarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Kapowarr

\n

Kapowarr is a software to build and manage a comic book library, fitting in the *arr suite of software.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Kapowarr directories.\nAfterward, the Kapowarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/kavita/app_versions.json b/community/kavita/app_versions.json new file mode 100644 index 0000000000..d0e3511249 --- /dev/null +++ b/community/kavita/app_versions.json @@ -0,0 +1,507 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/kavita/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "0.7.8_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "kavita", + "description": "Kavita is a fast, feature rich, cross platform reading server.", + "annotations": { + "title": "Kavita" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "0.7.8", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.kavitareader.com/", + "icon": "https://media.sys.truenas.net/apps/kavita/icons/icon.png", + "sources": [ + "https://github.com/Kareadita/Kavita", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/kavita", + "https://www.kavitareader.com" + ], + "keywords": [ + "manga", + "ebook" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Kavita runs as root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Kavita Configuration", + "description": "Configure Kavita" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Kavita" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Kavita" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Kavita" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Kavita Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "kavitaConfig", + "label": "", + "group": "Kavita Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Kavita.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "kavitaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Kavita Web UI.", + "schema": { + "type": "int", + "default": 30069, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "kavitaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Kavita Config Storage", + "description": "The path to store Kavita Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Kavita.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Kavita.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Kavita.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Kavita

\n

Kavita is a fast, feature rich, cross platform reading server.

", + "detailed_readme": "

Kavita

\n

Kavita is a fast, feature rich, cross platform reading server.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/komga/app_versions.json b/community/komga/app_versions.json new file mode 100644 index 0000000000..d8f4561fff --- /dev/null +++ b/community/komga/app_versions.json @@ -0,0 +1,553 @@ +{ + "1.1.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/komga/1.1.4", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.7.1_1.1.4", + "version": "1.1.4", + "chart_metadata": { + "name": "komga", + "description": "Komga is a free and open source comics/mangas server.", + "annotations": { + "title": "Komga" + }, + "type": "application", + "version": "1.1.4", + "apiVersion": "v2", + "appVersion": "1.7.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://komga.org", + "icon": "https://media.sys.truenas.net/apps/komga/icons/icon.svg", + "sources": [ + "https://github.com/gotson/komga", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/komga", + "https://hub.docker.com/r/gotson/komga" + ], + "keywords": [ + "media", + "comics", + "mangas" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "komga", + "groupName": "komga", + "gid": 568, + "uid": 568, + "description": "Komga can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Komga Configuration", + "description": "Configure Komga" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Komga" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Komga" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Komga" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Komga" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Komga Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "komgaConfig", + "label": "", + "group": "Komga Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Komga.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "komgaRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Komga will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Komga will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "komgaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Komga Web UI.", + "schema": { + "type": "int", + "default": 30048, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "komgaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Komga Config Storage", + "description": "The path to store Komga Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Komga.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Komga.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Komga.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Komga

\n

Komga is a free and open source comics/mangas server.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Komga directories.\nAfterward, the Komga container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Komga

\n

Komga is a free and open source comics/mangas server.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Komga directories.\nAfterward, the Komga container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/lidarr/app_versions.json b/community/lidarr/app_versions.json new file mode 100644 index 0000000000..6702bbc5fd --- /dev/null +++ b/community/lidarr/app_versions.json @@ -0,0 +1,538 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/lidarr/1.1.2", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2.0.1.3769_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "lidarr", + "description": "Lidarr is a music collection manager for Usenet and BitTorrent users.", + "annotations": { + "title": "Lidarr" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "2.0.1.3769", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://github.com/Lidarr/Lidarr", + "icon": "https://media.sys.truenas.net/apps/lidarr/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/lidarr", + "https://github.com/truenas/charts/tree/master/community/lidarr", + "https://github.com/Lidarr/Lidarr" + ], + "keywords": [ + "media", + "music" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "lidarr", + "groupName": "lidarr", + "gid": 568, + "uid": 568, + "description": "Lidarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Lidarr Configuration", + "description": "Configure Lidarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Lidarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Lidarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Lidarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Lidarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "lidarrConfig", + "label": "", + "group": "Lidarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the Lidarr instance.", + "schema": { + "type": "string", + "default": "Lidarr", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Lidarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "lidarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Lidarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Lidarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "lidarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Lidarr Web UI.", + "schema": { + "type": "int", + "default": 30014, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "lidarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Lidarr Config Storage", + "description": "The path to store Lidarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Lidarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Lidarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Lidarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Lidarr

\n

Lidarr is a music collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Lidarr directories.\nAfterward, the Lidarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Lidarr

\n

Lidarr is a music collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Lidarr directories.\nAfterward, the Lidarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/linkding/app_versions.json b/community/linkding/app_versions.json new file mode 100644 index 0000000000..409ea3cfea --- /dev/null +++ b/community/linkding/app_versions.json @@ -0,0 +1,775 @@ +{ + "1.1.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/linkding/1.1.4", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.22.3_1.1.4", + "version": "1.1.4", + "chart_metadata": { + "name": "linkding", + "description": "Linkding is a bookmark manager that you can host yourself.", + "annotations": { + "title": "Linkding" + }, + "type": "application", + "version": "1.1.4", + "apiVersion": "v2", + "appVersion": "1.22.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://github.com/sissbruecker/linkding", + "icon": "https://media.sys.truenas.net/apps/linkding/icons/icon.svg", + "sources": [ + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/linkding", + "https://github.com/sissbruecker/linkding", + "https://hub.docker.com/r/sissbruecker/linkding/" + ], + "keywords": [ + "bookmark" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "linkding", + "groupName": "linkding", + "gid": 568, + "uid": 568, + "description": "Linkding can run as any non-root user." + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Linkding Configuration", + "description": "Configure Linkding" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Linkding" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Linkding" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Linkding" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Linkding" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "linkdingConfig", + "label": "", + "group": "Linkding Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "Username", + "description": "The username for Linkding.
\nIt creates a superuser if it doesn't exist.
\nLeaving this empty will disable authentication.\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for Linkding.
\nIt creates a superuser if it doesn't exist.
\nLeaving this empty will disable authentication.\n", + "schema": { + "type": "string", + "show_if": [ + [ + "username", + "!=", + "" + ] + ], + "default": "", + "private": true + } + }, + { + "variable": "disableBackgroundTasks", + "label": "Disable Background Tasks", + "description": "Disables background tasks, such as creating snapshots for bookmarks\non the the Internet Archive Wayback Machine.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "disableUrlValidation", + "label": "Disable URL Validation", + "description": "Completely disables URL validation for bookmarks.\nThis can be useful if you intend to store non fully qualified\ndomain name URLs, such as network paths, or you want to store\nURLs that use another protocol than http or https.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "enableAuthProxy", + "label": "Enable Auth Proxy", + "description": "Enable authentication proxy.
\nThis will disable the built-in authentication and use the\nauthentication proxy instead.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "authProxyUsernameHeader", + "label": "Auth Proxy Username Header", + "description": "The HTTP header that contains the username for the authentication\nproxy.\n", + "schema": { + "type": "string", + "show_if": [ + [ + "enableAuthProxy", + "=", + true + ] + ], + "default": "", + "required": true + } + }, + { + "variable": "authProxyLogoutUrl", + "label": "Auth Proxy Logout URL", + "description": "The URL to redirect to when logging out of the authentication proxy.\n", + "schema": { + "type": "string", + "show_if": [ + [ + "enableAuthProxy", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "csrfTrustedOrigins", + "label": "CSRF Trusted Origins", + "description": "A list of origins that are allowed to bypass the CSRF protection.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "origin", + "label": "Origin", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Linkding.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "linkdingNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Linkding Web UI.", + "schema": { + "type": "int", + "default": 30083, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "linkdingRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Linkding will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Linkding will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "linkdingStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Linkding Data Storage", + "description": "The path to store Linkding Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Postgres Data Storage", + "description": "The path to store Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Postgres Backup Storage", + "description": "The path to store Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Linkding.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Linkding.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Linkding.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Linkding

\n

Linkding is a bookmark manager that you can host yourself.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the linkding directories.\nAfterward, the linkding container will run as a non-root user (Default: 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the linkding and postgres data directories.

\n
", + "detailed_readme": "

Linkding

\n

Linkding is a bookmark manager that you can host yourself.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the linkding directories.\nAfterward, the linkding container will run as a non-root user (Default: 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the linkding and postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/listmonk/app_versions.json b/community/listmonk/app_versions.json new file mode 100644 index 0000000000..dc583edd13 --- /dev/null +++ b/community/listmonk/app_versions.json @@ -0,0 +1,690 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/listmonk/1.1.2", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "v2.5.1_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "listmonk", + "description": "Listmonk is a self-hosted newsletter and mailing list manager.", + "annotations": { + "title": "Listmonk" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "v2.5.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://listmonk.app/", + "icon": "https://media.sys.truenas.net/apps/listmonk/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/listmonk/listmonk", + "https://github.com/knadh/listmonk", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/listmonk" + ], + "keywords": [ + "mailing-list", + "newsletter" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "listmonk", + "groupName": "listmonk", + "gid": 568, + "uid": 568, + "description": "Listmonk can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Listmonk Configuration", + "description": "Configure Listmonk" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Listmonk" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Listmonk" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Listmonk" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Listmonk" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "listmonkConfig", + "label": "", + "group": "Listmonk Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "adminUsername", + "label": "Admin Username (Optional)", + "description": "The username for the Listmonk admin user.
\nLeave empty to disable authentication.\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "adminPassword", + "label": "Admin Password", + "description": "The password for the Listmonk admin user.", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "adminUsername", + "!=", + "" + ] + ], + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Listmonk.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "listmonkRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Listmonk will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Listmonk will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "listmonkNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Listmonk Web UI.", + "schema": { + "type": "int", + "default": 30093, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "listmonkStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "uploads", + "label": "Listmonk Uploads Storage", + "description": "The path to store Listmonk uploads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "uploads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Listmonk Postgres Data Storage", + "description": "The path to store Listmonk Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Listmonk Postgres Backup Storage", + "description": "The path to store Listmonk Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Listmonk.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Listmonk.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Listmonk.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Listmonk

\n

Listmonk is a self-hosted newsletter and mailing list manager.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the listmonk directories.\nAfterward, the listmonk container will run as a non-root user (default 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the listmonk and postgres data directories.

\n
", + "detailed_readme": "

Listmonk

\n

Listmonk is a self-hosted newsletter and mailing list manager.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the listmonk directories.\nAfterward, the listmonk container will run as a non-root user (default 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the listmonk and postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/logseq/app_versions.json b/community/logseq/app_versions.json new file mode 100644 index 0000000000..24855166ff --- /dev/null +++ b/community/logseq/app_versions.json @@ -0,0 +1,479 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/logseq/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "latest_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "logseq", + "description": "Logseq is a privacy-first, open-source platform for knowledge management and collaboration.", + "annotations": { + "title": "Logseq" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "latest", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://logseq.com/", + "icon": "https://media.sys.truenas.net/apps/logseq/icons/icon.png", + "sources": [ + "https://github.com/logseq/logseq", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/logseq" + ], + "keywords": [ + "knowledge", + "management" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "logseq", + "groupName": "logseq", + "gid": 568, + "uid": 568, + "description": "Logseq can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Logseq Configuration", + "description": "Configure Logseq" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Logseq" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Logseq" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Logseq" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Logseq" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "logseqConfig", + "label": "", + "group": "Logseq Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Logseq.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "logseqRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Logseq will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Logseq will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "logseqNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Logseq Web UI.", + "schema": { + "type": "int", + "default": 30079, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Logseq.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "logseqStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Logseq.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Logseq.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Logseq.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Logseq

\n

Logseq is a privacy-first, open-source platform for knowledge management and collaboration.

\n

HTTPS is required in order to use Logseq.

\n

Either by using the Certificate selection or with an external reverse proxy.

", + "detailed_readme": "

Logseq

\n

Logseq is a privacy-first, open-source platform for knowledge management and collaboration.

\n

HTTPS is required in order to use Logseq.

\n

Either by using the Certificate selection or with an external reverse proxy.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/metube/app_versions.json b/community/metube/app_versions.json new file mode 100644 index 0000000000..59cbc1ba01 --- /dev/null +++ b/community/metube/app_versions.json @@ -0,0 +1,551 @@ +{ + "1.1.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/metube/1.1.3", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2023-11-04_1.1.3", + "version": "1.1.3", + "chart_metadata": { + "name": "metube", + "description": "MeTube is a web GUI for youtube-dl (using the yt-dlp fork) with playlist support.", + "annotations": { + "title": "MeTube" + }, + "type": "application", + "version": "1.1.3", + "apiVersion": "v2", + "appVersion": "2023-11-04", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://github.com/alexta69/metube", + "icon": "https://localhost/no-icon", + "sources": [ + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/metube", + "https://github.com/alexta69/metube" + ], + "keywords": [ + "youtube-dl", + "yt-dlp" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "metube", + "groupName": "metube", + "gid": 568, + "uid": 568, + "description": "MeTube can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "MeTube Configuration", + "description": "Configure MeTube" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for MeTube" + }, + { + "name": "Network Configuration", + "description": "Configure Network for MeTube" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for MeTube" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for MeTube" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "metubeConfig", + "label": "", + "group": "MeTube Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "defaultTheme", + "label": "Default Theme", + "description": "The default theme for MeTube.", + "schema": { + "type": "string", + "default": "auto", + "required": true, + "enum": [ + { + "value": "auto", + "description": "Auto" + }, + { + "value": "dark", + "description": "Dark" + }, + { + "value": "light", + "description": "Light" + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for MeTube.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "metubeRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that MeTube will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that MeTube will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "metubeNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the MeTube Web UI.", + "schema": { + "type": "int", + "default": 30094, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "metubeStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "downloads", + "label": "MeTube Downloads Storage", + "description": "The path to store MeTube Downloads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "downloads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for MeTube.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for MeTube.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for MeTube.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

MeTube

\n

MeTube is a web GUI for youtube-dl (using the yt-dlp fork) with playlist support.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the MeTube directories.\nAfterward, the MeTube container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

MeTube

\n

MeTube is a web GUI for youtube-dl (using the yt-dlp fork) with playlist support.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the MeTube directories.\nAfterward, the MeTube container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/minecraft/app_versions.json b/community/minecraft/app_versions.json new file mode 100644 index 0000000000..f3bf65a3a8 --- /dev/null +++ b/community/minecraft/app_versions.json @@ -0,0 +1,1117 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/minecraft/1.1.2", + "last_update": "2023-11-07 13:48:16", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2023.11.0_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "minecraft", + "description": "Minecraft is a sandbox game", + "annotations": { + "title": "Minecraft" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "2023.11.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://www.minecraft.net/en-us", + "icon": "https://media.sys.truenas.net/apps/minecraft/icons/icon.svg", + "sources": [ + "https://www.minecraft.net/en-us", + "https://github.com/truenas/charts/tree/master/community/minecraft", + "https://github.com/itzg/docker-minecraft-server" + ], + "keywords": [ + "minecraft" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Minecraft requires root privileges to start the Minecraft process" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Minecraft is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Minecraft is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Minecraft is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Minecraft is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Minecraft is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Minecraft Configuration", + "description": "Configure Minecraft" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Minecraft" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Minecraft" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Minecraft" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Minecraft" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "Minecraft Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "mcConfig", + "label": "", + "group": "Minecraft Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "eula", + "label": "EULA", + "description": "Accept the EULA.", + "schema": { + "type": "boolean", + "default": false, + "required": true + } + }, + { + "variable": "imageSelector", + "label": "Image", + "description": "The image to use for Minecraft.
\nDepending on the image you select, you might\nneed to adjust the Version and Type fields.\n", + "schema": { + "type": "string", + "default": "j17Image", + "required": true, + "enum": [ + { + "value": "j8Image", + "description": "Java 8 HotSpot (Alpine)" + }, + { + "value": "j8j9Image", + "description": "Java 8 OpenJ9 (Debian)" + }, + { + "value": "j8jdkImage", + "description": "Java 8 HotSpot+JDK (Ubuntu)" + }, + { + "value": "j8gceImage", + "description": "Java 8 GraalVM CE (Oracle)" + }, + { + "value": "j11Image", + "description": "Java 11 HotSpot (Ubuntu)" + }, + { + "value": "j11j9Image", + "description": "Java 11 OpenJ9 (Debian)" + }, + { + "value": "j11jdkImage", + "description": "Java 11 HotSpot+JDK (Ubuntu)" + }, + { + "value": "j17Image", + "description": "Java 17 HotSpot (Ubuntu)" + }, + { + "value": "j17j9Image", + "description": "Java 17 OpenJ9 (Debian)" + }, + { + "value": "j17jdkImage", + "description": "Java 17 HotSpot+JDK (Ubuntu)" + }, + { + "value": "j17gceImage", + "description": "Java 17 GraalVM CE (Oracle)" + }, + { + "value": "j17alpineImage", + "description": "Java 17 HotSpot (Alpine)" + }, + { + "value": "j19Image", + "description": "Java 19 HotSpot (Ubuntu)" + } + ] + } + }, + { + "variable": "type", + "label": "Type", + "description": "The type of Minecraft server to run.
\nDepending on the type you select, you might need\nto add additional environment variables.
\nhttps://itzg.github.io/docker-minecraft-docs/java/server-types/bukkit-spigot\n", + "schema": { + "type": "string", + "default": "VANILLA", + "required": true, + "enum": [ + { + "value": "VANILLA", + "description": "Vanilla" + }, + { + "value": "SPIGOT", + "description": "Spigot" + }, + { + "value": "BUKKIT", + "description": "Bukkit" + }, + { + "value": "FORGE", + "description": "Forge" + }, + { + "value": "CATSERVER", + "description": "CatServer" + }, + { + "value": "CRUCIBLE", + "description": "Crucible" + }, + { + "value": "AUTO_CURSEFORGE", + "description": "Auto CurseForge" + }, + { + "value": "CUSTOM", + "description": "Custom" + }, + { + "value": "FABRIC", + "description": "Fabric" + }, + { + "value": "FTBA", + "description": "Feed The Beast" + }, + { + "value": "FORGE", + "description": "Forge" + }, + { + "value": "LOLISERVER", + "description": "LoliServer" + }, + { + "value": "LIMBO", + "description": "Limbo" + }, + { + "value": "MAGMA", + "description": "Magma" + }, + { + "value": "MOHIST", + "description": "Mohist" + }, + { + "value": "FABRIC", + "description": "Fabric" + }, + { + "value": "PAPER", + "description": "Paper" + }, + { + "value": "PUFFERFISH", + "description": "Pufferfish" + }, + { + "value": "PURPUR", + "description": "Purpur" + }, + { + "value": "QUILT", + "description": "Quilt" + }, + { + "value": "SPONGEVANILLA", + "description": "SpongeVanilla" + } + ] + } + }, + { + "variable": "version", + "label": "Version", + "description": "The minecraft version.
\nhttps://itzg.github.io/docker-minecraft-docs/java/versions/minecraft\n", + "schema": { + "type": "string", + "default": "LATEST", + "required": true + } + }, + { + "variable": "serverName", + "label": "Server Name", + "description": "The name of the Minecraft server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/servername\n", + "schema": { + "type": "string", + "default": "Minecraft Server", + "required": true + } + }, + { + "variable": "difficulty", + "label": "Difficulty", + "description": "The difficulty of the Minecraft server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/difficulty\n", + "schema": { + "type": "string", + "default": "easy", + "required": true, + "enum": [ + { + "value": "peaceful", + "description": "Peaceful" + }, + { + "value": "easy", + "description": "Easy" + }, + { + "value": "normal", + "description": "Normal" + }, + { + "value": "hard", + "description": "Hard" + } + ] + } + }, + { + "variable": "seed", + "label": "Seed", + "description": "The seed for the Minecraft server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/seed
\n(Quotes is handled by the field automatically)\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "mode", + "label": "Game Mode", + "description": "The game mode of the Minecraft server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/gamemode\n", + "schema": { + "type": "string", + "default": "survival", + "required": true, + "enum": [ + { + "value": "survival", + "description": "Survival" + }, + { + "value": "creative", + "description": "Creative" + }, + { + "value": "adventure", + "description": "Adventure" + }, + { + "value": "spectator", + "description": "Spectator" + } + ] + } + }, + { + "variable": "levelType", + "label": "Level Type", + "description": "The level type of the Minecraft server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/#level-type-and-generator-settings\n", + "schema": { + "type": "string", + "default": "minecraft:default", + "required": true, + "enum": [ + { + "value": "minecraft:default", + "description": "Default" + }, + { + "value": "minecraft:flat", + "description": "Flat" + }, + { + "value": "minecraft:large_biomes", + "description": "Large Biomes" + }, + { + "value": "minecraft:amplified", + "description": "Amplified" + }, + { + "value": "minecraft:single_biome_surface", + "description": "Single Biome Surface" + }, + { + "value": "buffet", + "description": "Buffet" + }, + { + "value": "customized", + "description": "Customized" + } + ] + } + }, + { + "variable": "motd", + "label": "Message of the Day", + "description": "The message of the day for the Minecraft server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/motd\n", + "schema": { + "type": "string", + "default": "Welcome to Minecraft on TrueNAS!", + "required": true + } + }, + { + "variable": "enableRcon", + "label": "Enable RCON", + "description": "Enable RCON for the Minecraft server.
\nIt is recommended to keep this enabled, as it helps to\nshut down the minecraft server gracefully.
\nhttps://itzg.github.io/docker-minecraft-docs/java/rcon\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "rconPassword", + "label": "RCON Password", + "description": "The RCON password for the Minecraft server.", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enableRcon", + "=", + true + ] + ], + "private": true, + "required": true + } + }, + { + "variable": "maxPlayers", + "label": "Max Players", + "description": "The maximum number of players that can join the server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/maxplayers\n", + "schema": { + "type": "int", + "default": 20, + "min": 1, + "required": true + } + }, + { + "variable": "maxWorldSize", + "label": "Max World Size", + "description": "The maximum possible size in blocks, expressed as a radius.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/maxworldsize\n", + "schema": { + "type": "int", + "default": 10000, + "min": 1, + "required": true + } + }, + { + "variable": "maxBuildHeight", + "label": "Max Build Height", + "description": "The maximum height in which building is allowed.\nTerrain may still naturally generate above a low height limit.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/maxbuildheight\n", + "schema": { + "type": "int", + "default": 256, + "min": 1, + "required": true + } + }, + { + "variable": "allowNether", + "label": "Allow Nether", + "description": "Allows players to travel to the Nether.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/allownether\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "announcePlayerAchievements", + "label": "Announce Player Achievements", + "description": "Allows server to announce when a player gets an achievement.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/announceachievements\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "enableCommandBlock", + "label": "Enable Command Block", + "description": "Enables the command blocks.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/enablecommandblock\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "forceGameMode", + "label": "Force Game Mode", + "description": "Force players to join in the default game mode.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/forcegamemode\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "generateStructures", + "label": "Generate Structures", + "description": "Defines whether structures (such as villages) will be generated.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/generatestructures\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "hardcore", + "label": "Hardcore", + "description": "If set to true, players will be set to spectator mode if they die.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/hardcore\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "spawnAnimals", + "label": "Spawn Animals", + "description": "Determines if animals will be able to spawn.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/spawnanimals\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "spawnNpcs", + "label": "Spawn NPCs", + "description": "Determines if villagers will be spawned.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/spawnnpcs\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "spawnMonsters", + "label": "Spawn Monsters", + "description": "Determines if monsters will be spawned.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/spawnmonsters\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "spawnProtection", + "label": "Spawn Protection", + "description": "The radius of the spawn protection.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/spawnprotection\n", + "schema": { + "type": "int", + "default": 16, + "min": 0, + "required": true + } + }, + { + "variable": "pvp", + "label": "PVP", + "description": "Determines if PVP will be enabled.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/pvp\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowFlight", + "label": "Allow Flight", + "description": "Allows users to use flight on your server while in Survival mode,\nif they have a mod that provides flight installed.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/allowflight\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "viewDistance", + "label": "View Distance", + "description": "Sets the amount of world data the server sends the client,\nmeasured in chunks in each direction of the player (radius, not diameter).\nIt determines the server-side viewing distance.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/viewdistance\n", + "schema": { + "type": "int", + "default": 10, + "min": 3, + "max": 32, + "required": true + } + }, + { + "variable": "onlineMode", + "label": "Online Mode", + "description": "If set to true, the server will attempt to authenticate clients\nconnecting to it with the Minecraft account database.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/onlinemode\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "maxTickTime", + "label": "Max Tick Time", + "description": "The maximum number of milliseconds a single tick may take\nbefore the server watchdog stops the server with the message,\nA single server tick took 60.00 seconds (should be max 0.05);\nConsidering it to be crashed, server will forcibly shutdown.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/maxticktime\n", + "schema": { + "type": "int", + "default": 60000, + "min": 0, + "required": true + } + }, + { + "variable": "ops", + "label": "Operators / Administrators", + "description": "A list of player names who should be considered operators.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/ops\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "opPlayer", + "label": "OP Player", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "whitelist", + "label": "Whitelist", + "description": "A list of player names who are allowed to play on the server.
\nhttps://itzg.github.io/docker-minecraft-docs/java/configuration/whitelist\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "whitePlayer", + "label": "Whitelisted Player", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Minecraft.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "mcID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Minecraft files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Minecraft files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "mcNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverPort", + "label": "Server Port", + "description": "The port for the Minecraft Server.
\nThis will apply to both external and internal ports.\n", + "schema": { + "type": "int", + "default": 25535, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "rconPort", + "label": "RCON Port", + "description": "The RCON port for the Minecraft.
\nThis will apply to both external and internal ports.\n", + "schema": { + "type": "int", + "default": 25575, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "mcStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Minecraft Data Storage", + "description": "The path to store Minecraft Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Minecraft.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Minecraft.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Minecraft.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Minecraft

\n

Minecraft is a sandbox game

\n
\n

Application requires to run as root.

\n
\n

Depending on the Type of server selected, you might need to add additional\ncustom environment variables to the application.

\n

More info can be found here\nSelect the type on the sidebar.

\n

Note that some values are only applicable during the world generation.\nMore info can be found here

", + "detailed_readme": "

Minecraft

\n

Minecraft is a sandbox game

\n
\n

Application requires to run as root.

\n
\n

Depending on the Type of server selected, you might need to add additional\ncustom environment variables to the application.

\n

More info can be found here\nSelect the type on the sidebar.

\n

Note that some values are only applicable during the world generation.\nMore info can be found here

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/mineos/app_versions.json b/community/mineos/app_versions.json new file mode 100644 index 0000000000..7b2ed0c65f --- /dev/null +++ b/community/mineos/app_versions.json @@ -0,0 +1,445 @@ +{ + "1.0.11": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/mineos/1.0.11", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "latest_1.0.11", + "version": "1.0.11", + "chart_metadata": { + "name": "mineos", + "description": "MineOS is a server front-end to ease managing Minecraft administrative tasks.", + "annotations": { + "title": "MineOS" + }, + "type": "application", + "version": "1.0.11", + "apiVersion": "v2", + "appVersion": "latest", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/hexparrot/mineos-node", + "icon": "https://media.sys.truenas.net/apps/mineos/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/hexparrot/mineos/", + "https://github.com/truenas/charts/tree/master/community/mineos", + "https://github.com/hexparrot/mineos-node" + ], + "keywords": [ + "minecraft" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "MineOS runs as root user" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "MineOS requires this ability to change ownership of files." + }, + { + "name": "DAC_OVERRIDE", + "description": "MineOS requires this ability to bypass file permissions." + }, + { + "name": "FOWNER", + "description": "MineOS requires this ability to bypass file permissions for it's sub-processes." + }, + { + "name": "SETGID", + "description": "MineOS requires this ability to switch group for sub-processes." + }, + { + "name": "SETUID", + "description": "MineOS requires this ability to switch user for sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "MineOS Configuration", + "description": "Configure MineOS" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for MineOS" + }, + { + "name": "Network Configuration", + "description": "Configure Network for MineOS" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for MineOS" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for MineOS" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "mineosConfig", + "label": "", + "group": "MineOS Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "Username", + "description": "The username for MineOS WebUI.", + "schema": { + "type": "string", + "empty": false, + "required": true, + "valid_chars": "^[a-zA-Z0-9]+$", + "valid_chars_error": "Username can only contain alphanumeric characters [0-9, a-z, A-Z].\n" + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for MineOS WebUI.", + "schema": { + "type": "string", + "empty": false, + "required": true, + "private": true + } + }, + { + "variable": "terminationGracePeriodSeconds", + "label": "Stop Grace Period", + "description": "The time in seconds given to MineOS to stop before it is killed.\nKilling a MineOS server without a grace period can cause data corruption.\n", + "schema": { + "type": "int", + "empty": false, + "min": 30, + "required": true, + "default": 600 + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for MineOS.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "mineosID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that MineOS files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that MineOS files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "mineosNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "WebUI Port", + "description": "The port for MineOS WebUI", + "schema": { + "type": "int", + "default": 30015, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "mineosPortRangeStart", + "label": "Port Range Start", + "description": "The start of the port range for MineOS servers.
\nIt will open both TCP and UDP ports.\n", + "schema": { + "type": "int", + "default": 30016, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "mineosPortRangeEnd", + "label": "Port Range End", + "description": "The end of the port range for MineOS servers.
\nIt will open both TCP and UDP ports.
\nKeep in mind that the port range can be at max 10 ports.\n", + "schema": { + "type": "int", + "default": 30017, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "useHTTPS", + "label": "Use HTTPS", + "description": "Enable HTTPS for MineOS WebUI.
\nIf enabled, and you don't specify a certificate,
\na self-signed certificate will be generated.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for MineOS WebUI", + "schema": { + "show_if": [ + [ + "useHTTPS", + "=", + true + ] + ], + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "mineosStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "MineOS Data Storage", + "description": "The path to store MineOS Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "Resources Configuration", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for MineOS.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for MineOS.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

MineOS

\n

MineOS is a server front-end to ease managing Minecraft administrative tasks.

", + "detailed_readme": "

MineOS

\n

MineOS is a server front-end to ease managing Minecraft administrative tasks.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/mumble/app_versions.json b/community/mumble/app_versions.json new file mode 100644 index 0000000000..cbcb97cc88 --- /dev/null +++ b/community/mumble/app_versions.json @@ -0,0 +1,375 @@ +{ + "1.0.13": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/mumble/1.0.13", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "v1.4.230_1.0.13", + "version": "1.0.13", + "chart_metadata": { + "name": "mumble", + "description": "Mumble is a free, open source, low latency, high quality voice chat application.", + "annotations": { + "title": "Mumble" + }, + "type": "application", + "version": "1.0.13", + "apiVersion": "v2", + "appVersion": "v1.4.230", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.mumble.info/", + "icon": "https://media.sys.truenas.net/apps/mumble/icons/icon.svg", + "sources": [ + "https://github.com/mumble-voip/mumble-docker", + "https://github.com/truenas/charts/tree/master/community/mumble", + "https://www.mumble.info/" + ], + "keywords": [ + "voice" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "mumble", + "groupName": "mumble", + "gid": 1000, + "uid": 1000, + "description": "Mumble runs as non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Mumble Configuration", + "description": "Configure Mumble" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Mumble" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Mumble" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Mumble" + } + ], + "questions": [ + { + "variable": "mumbleConfig", + "label": "", + "group": "Mumble Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "serverPassword", + "label": "Server Password", + "description": "The password for the Mumble Server.", + "schema": { + "type": "string", + "empty": false, + "required": true, + "private": true + } + }, + { + "variable": "superUserPassword", + "label": "Super User Password", + "description": "The password for the Mumble Super User.", + "schema": { + "type": "string", + "empty": false, + "required": true, + "private": true + } + }, + { + "variable": "iceSecretRead", + "label": "Ice Secret Read", + "description": "The Ice Secret for Read Operations.", + "schema": { + "type": "string", + "empty": false, + "required": true, + "private": true + } + }, + { + "variable": "iceSecretWrite", + "label": "Ice Secret Write", + "description": "The Ice Secret for Write Operations.", + "schema": { + "type": "string", + "empty": false, + "required": true, + "private": true + } + }, + { + "variable": "users", + "label": "Users", + "description": "The maximum number of users for the Mumble Server.", + "schema": { + "type": "int", + "default": 100, + "required": true + } + }, + { + "variable": "welcomeText", + "label": "Welcome Text", + "description": "The welcome text for the Mumble Server.", + "schema": { + "type": "string", + "default": "Welcome to Mumble!", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Mumble.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "mumbleNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "serverPort", + "label": "Server Port", + "description": "The port for the Mumble Server (UDP & TCP).", + "schema": { + "type": "int", + "default": 30018, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "icePort", + "label": "Ice Port", + "description": "The port for the Ice.", + "schema": { + "type": "int", + "default": 30019, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Mumble", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "mumbleStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Mumble Data Storage", + "description": "The path to store Mumble Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "Resources Configuration", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Mumble.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Mumble.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Mumble

\n

Mumble is an Open Source, Low Latency, High Quality Voice Chat Home Downloads Documentation Blog Contribute About

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Mumble directories.\nAfterward, the Mumble container will run as a non-root user (1000, Cannot change).

\n
\n

You can change the server configuration by adding additional environment variables.\nPrefix the configuration variable with MUMBLE_CONFIG_ and it will be added to the configuration file.\nView the Mumble Configuration File for more information.

\n

For example you can set autobanAttempts like this:

\n", + "detailed_readme": "

Mumble

\n

Mumble is an Open Source, Low Latency, High Quality Voice Chat Home Downloads Documentation Blog Contribute About

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Mumble directories.\nAfterward, the Mumble container will run as a non-root user (1000, Cannot change).

\n
\n

You can change the server configuration by adding additional environment variables.\nPrefix the configuration variable with MUMBLE_CONFIG_ and it will be added to the configuration file.\nView the Mumble Configuration File for more information.

\n

For example you can set autobanAttempts like this:

\n", + "changelog": null + } +} \ No newline at end of file diff --git a/community/n8n/app_versions.json b/community/n8n/app_versions.json new file mode 100644 index 0000000000..4fae9e5770 --- /dev/null +++ b/community/n8n/app_versions.json @@ -0,0 +1,712 @@ +{ + "1.1.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/n8n/1.1.4", + "last_update": "2023-11-08 12:52:59", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/nodeIP" + ], + "human_version": "1.15.2_1.1.4", + "version": "1.1.4", + "chart_metadata": { + "name": "n8n", + "description": "n8n is an extendable workflow automation tool.", + "annotations": { + "title": "n8n" + }, + "type": "application", + "version": "1.1.4", + "apiVersion": "v2", + "appVersion": "1.15.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://n8n.io/", + "icon": "https://media.sys.truenas.net/apps/n8n/icons/icon.png", + "sources": [ + "https://github.com/n8n-io/n8n", + "https://github.com/truenas/charts/tree/master/community/n8n", + "https://hub.docker.com/r/n8nio/n8n" + ], + "keywords": [ + "workflows", + "automation" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "n8n", + "groupName": "n8n", + "gid": 568, + "uid": 568, + "description": "n8n runs as any non-root user" + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + }, + { + "userName": "redis", + "groupName": "redis", + "gid": 1001, + "uid": 0, + "description": "Redis runs as a non-root user and root group." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "n8n Configuration", + "description": "Configure n8n" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for n8n" + }, + { + "name": "Network Configuration", + "description": "Configure Network for n8n" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for n8n" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for n8n" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "n8nConfig", + "label": "", + "group": "n8n Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webHost", + "label": "n8n Host", + "description": "The host address.
\nExamples:
\nn8n.example.com
\n192.168.1.100\n", + "schema": { + "type": "string", + "default": "192.168.0.10", + "required": true, + "$ref": [ + "definitions/nodeIP" + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for n8n.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "n8nRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that n8n will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that n8n will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "n8nNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the n8n WebUI.", + "schema": { + "type": "int", + "default": 30068, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for n8n", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "n8nStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "n8n Data Storage", + "description": "The path to store n8n data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "n8n Postgres Data Storage", + "description": "The path to store n8n Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "n8n Postgres Backup Storage", + "description": "The path to store n8n Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for n8n.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for n8n.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for n8n.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

n8n

\n

n8n is an extendable workflow automation tool.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "detailed_readme": "

n8n

\n

n8n is an extendable workflow automation tool.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the postgres directories.\nAfterward, the postgres container will run as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/navidrome/app_versions.json b/community/navidrome/app_versions.json new file mode 100644 index 0000000000..f0055149e1 --- /dev/null +++ b/community/navidrome/app_versions.json @@ -0,0 +1,605 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/navidrome/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "0.49.3_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "navidrome", + "description": "Navidrome is a personal streaming service", + "annotations": { + "title": "Navidrome" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "0.49.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.navidrome.org/", + "icon": "https://media.sys.truenas.net/apps/navidrome/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/deluan/navidrome", + "https://github.com/truenas/charts/tree/master/community/navidrome", + "https://github.com/navidrome/navidrome/" + ], + "keywords": [ + "media", + "music" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "navidrome", + "groupName": "navidrome", + "gid": 568, + "uid": 568, + "description": "Navidrome can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Navidrome Configuration", + "description": "Configure Navidrome" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Navidrome" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Navidrome" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Navidrome" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Navidrome" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "navidromeConfig", + "label": "", + "group": "Navidrome Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "uiWelcomeMessage", + "label": "Login Screen Welcome Message", + "description": "The welcome message to display on the Navidrome Login Screen.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Navidrome.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "navidromeRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Navidrome will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Navidrome will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "navidromeNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Navidrome Web UI.", + "schema": { + "type": "int", + "default": 30043, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "navidromeStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Navidrome Data Storage", + "description": "The path to store Navidrome Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "music", + "label": "Navidrome Music Storage", + "description": "The path to store Navidrome Music.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "music", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Navidrome.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Navidrome.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Navidrome.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Navidrome

\n

Navidrome is a personal streaming service

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Navidrome directories.\nAfterward, the Navidrome container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

Additional configuration options can be defined via environment variables.\nSee more information on the Navidrome Documentation

", + "detailed_readme": "

Navidrome

\n

Navidrome is a personal streaming service

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Navidrome directories.\nAfterward, the Navidrome container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

Additional configuration options can be defined via environment variables.\nSee more information on the Navidrome Documentation

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/nginx-proxy-manager/app_versions.json b/community/nginx-proxy-manager/app_versions.json new file mode 100644 index 0000000000..fb6c19cd96 --- /dev/null +++ b/community/nginx-proxy-manager/app_versions.json @@ -0,0 +1,435 @@ +{ + "1.0.18": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/nginx-proxy-manager/1.0.18", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "2.10.4_1.0.18", + "version": "1.0.18", + "chart_metadata": { + "name": "nginx-proxy-manager", + "description": "Expose your services easily and securely", + "annotations": { + "title": "Nginx Proxy Manager" + }, + "type": "application", + "version": "1.0.18", + "apiVersion": "v2", + "appVersion": "2.10.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://nginxproxymanager.com/", + "icon": "https://media.sys.truenas.net/apps/nginx-proxy-manager/icons/icon.png", + "sources": [ + "https://nginxproxymanager.com/", + "https://github.com/truenas/charts/tree/master/community/nginx-proxy-manager", + "https://hub.docker.com/r/jc21/nginx-proxy-manager" + ], + "keywords": [ + "nginx", + "proxy" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Nginx Proxy Manager requires root privileges to start the nginx process." + } + ], + "capabilities": [ + { + "name": "SETUID", + "description": "Nginx Proxy Manager requires this ability to switch user for sub-processes." + }, + { + "name": "SETGID", + "description": "Nginx Proxy Manager requires this ability to switch group for sub-processes." + }, + { + "name": "CHOWN", + "description": "Nginx Proxy Manager requires this ability to chown files." + }, + { + "name": "FOWNER", + "description": "Nginx Proxy Manager requires this ability to bypass file ownership checks for it's sub-processes." + }, + { + "name": "DAC_OVERRIDE", + "description": "Nginx Proxy Manager requires this ability to bypass file permission checks for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Nginx Proxy Manager Configuration", + "description": "Configure Nginx Proxy Manager" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Nginx Proxy Manager" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Nginx Proxy Manager" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Nginx Proxy Manager" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Nginx Proxy Manager" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Nginx Proxy Manager Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "npmConfig", + "label": "", + "group": "Nginx Proxy Manager Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Nginx Proxy Manager.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "npmNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Nginx Proxy Manager Web UI.", + "schema": { + "type": "int", + "default": 30020, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "httpPort", + "label": "HTTP Port", + "description": "The HTTP port for the Nginx Proxy Manager.", + "schema": { + "type": "int", + "default": 30021, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "httpsPort", + "label": "HTTPS Port", + "description": "The HTTP port for the Nginx Proxy Manager.", + "schema": { + "type": "int", + "default": 30022, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "npmStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Nginx Proxy Manager Data Storage", + "description": "The path to store Nginx Proxy Manager Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "certs", + "label": "Nginx Proxy Manager Certificate Storage", + "description": "The path to store Nginx Proxy Manager Certificate.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "certs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Nginx Proxy Manager.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Nginx Proxy Manager.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Nginx Proxy Manager

\n

Nginx Proxy Manager Expose your services easily and securely

\n
\n

Application requires to run as root. This is a limitation of the application.

\n
", + "detailed_readme": "

Nginx Proxy Manager

\n

Nginx Proxy Manager Expose your services easily and securely

\n
\n

Application requires to run as root. This is a limitation of the application.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/node-red/app_versions.json b/community/node-red/app_versions.json new file mode 100644 index 0000000000..8ea0fa09cf --- /dev/null +++ b/community/node-red/app_versions.json @@ -0,0 +1,549 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/node-red/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "3.1.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "node-red", + "description": "Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.", + "annotations": { + "title": "Node-RED" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "3.1.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://nodered.org", + "icon": "https://media.sys.truenas.net/apps/node-red/icons/icon.png", + "sources": [ + "https://github.com/node-red/node-red-docker", + "https://github.com/truenas/charts/tree/master/community/node-red", + "https://nodered.org" + ], + "keywords": [ + "automation" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "node-red", + "groupName": "node-red", + "gid": 1000, + "uid": 1000, + "description": "Node-RED runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Node-RED Configuration", + "description": "Configure Node-RED" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Node-RED" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Node-RED" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Node-RED" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Node-RED" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "noderedConfig", + "label": "", + "group": "Node-RED Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "imageSelector", + "label": "Node-RED Image", + "description": "The Node-RED image to use.", + "schema": { + "type": "string", + "default": "node16Image", + "required": true, + "enum": [ + { + "value": "node14Image", + "description": "Node-RED on Node.js 14" + }, + { + "value": "node14MinimalImage", + "description": "Node-RED Minimal on Node.js 14" + }, + { + "value": "node16Image", + "description": "Node-RED on Node.js 16" + }, + { + "value": "node16MinimalImage", + "description": "Node-RED Minimal on Node.js 16" + }, + { + "value": "node18Image", + "description": "Node-RED on Node.js 18" + }, + { + "value": "node18MinimalImage", + "description": "Node-RED Minimal on Node.js 18" + } + ] + } + }, + { + "variable": "safeMode", + "label": "Safe Mode", + "description": "Starts Node-RED without starting the flows.
\nThis allows you to open the flows in the editor and\n make changes without the flows running.
\n When you deploy your changes, the flows are then started.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "enableProjects", + "label": "Enable Projects", + "description": "Enable projects in Node-RED.
\nThis allows you to use the projects feature in Node-RED.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Node-RED.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "noderedNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Node-RED Web UI.", + "schema": { + "type": "int", + "default": 30049, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "noderedStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Node-RED Data Storage", + "description": "The path to store Node-RED Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Node-RED.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Node-RED.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Node-RED.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Node-RED

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Node-RED directories.\nAfterward, the Node-RED container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Node-RED

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Node-RED directories.\nAfterward, the Node-RED container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/odoo/app_versions.json b/community/odoo/app_versions.json new file mode 100644 index 0000000000..fa528dbac0 --- /dev/null +++ b/community/odoo/app_versions.json @@ -0,0 +1,550 @@ +{ + "1.0.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/odoo/1.0.3", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "16.0_1.0.3", + "version": "1.0.3", + "chart_metadata": { + "name": "odoo", + "description": "Odoo is a suite of web based open source business apps.", + "annotations": { + "title": "Odoo" + }, + "type": "application", + "version": "1.0.3", + "apiVersion": "v2", + "appVersion": "16.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://www.odoo.com/", + "icon": "https://media.sys.truenas.net/apps/odoo/icons/icon.png", + "sources": [ + "https://hub.docker.com/_/odoo", + "https://github.com/truenas/charts/tree/master/community/odoo", + "https://github.com/odoo/odoo" + ], + "keywords": [ + "erp", + "odoo" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "odoo", + "groupName": "odoo", + "gid": 101, + "uid": 101, + "description": "Odoo runs as a non-root user" + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Odoo Configuration", + "description": "Configure Odoo" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Odoo" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Odoo" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Odoo" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "odooConfig", + "label": "", + "group": "Odoo Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalConf", + "label": "Additional File Configuration Options", + "description": "Configure additional file configuration options for Odoo.
\nOptions are appended to the end of the configuration file.
\nAfter the predefined configuration options.
\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "conf", + "label": "Configuration Option", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Odoo.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "odooNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Odoo WebUI.", + "schema": { + "type": "int", + "default": 30062, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "odooStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Odoo Data Storage", + "description": "The path to store Odoo data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "addons", + "label": "Odoo Addons Storage", + "description": "The path to store Odoo addons storage.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "addons", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Odoo Postgres Data Storage", + "description": "The path to store Odoo Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Odoo Postgres Backup Storage", + "description": "The path to store Odoo Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Odoo.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Odoo.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Odoo

\n

Odoo is a suite of web based open source business apps.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the odoo directories.\nAfterward, the odoo container will run as a non-root user (101).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the odoo and postgres data directories.

\n
", + "detailed_readme": "

Odoo

\n

Odoo is a suite of web based open source business apps.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the odoo directories.\nAfterward, the odoo container will run as a non-root user (101).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the odoo and postgres data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/omada-controller/app_versions.json b/community/omada-controller/app_versions.json new file mode 100644 index 0000000000..310c5c72a7 --- /dev/null +++ b/community/omada-controller/app_versions.json @@ -0,0 +1,771 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/omada-controller/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/timezone" + ], + "human_version": "5.12_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "omada-controller", + "description": "Omada Controller (TP-Link) is a network management controller for TP-Link Omada Equipment.", + "annotations": { + "title": "Omada Controller" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "5.12", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/mbentley/docker-omada-controller", + "icon": "https://media.sys.truenas.net/apps/omada-controller/icons/icon.svg", + "sources": [ + "https://github.com/mbentley/docker-omada-controller", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/omada-controller", + "https://hub.docker.com/r/mbentley/omada-controller" + ], + "keywords": [ + "network", + "controller", + "omada", + "tp-link" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Omada Controller runs as root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Omada Controller is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Omada Controller requires this ability to bypass file permissions." + }, + { + "name": "FOWNER", + "description": "Omada Controller requires this ability to bypass file permissions for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Omada Controller requires this ability to switch group for sub-processes." + }, + { + "name": "SETUID", + "description": "Omada Controller requires this ability to switch user for sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Omada Controller Configuration", + "description": "Configure Omada Controller" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Omada Controller" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Omada Controller" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Omada Controller" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Omada Controller" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Omada Controller Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "omadaConfig", + "label": "", + "group": "Omada Controller Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Omada Controller.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "omadaID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Omada Controller files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Omada Controller files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "omadaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "manageHttpPort", + "label": "Manage HTTP Port", + "description": "The port to use for Omada Controller HTTP management.", + "schema": { + "type": "int", + "default": 30076, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "manageHttpsPort", + "label": "Manage HTTPS Port", + "description": "The port to use for Omada Controller HTTPS management.", + "schema": { + "type": "int", + "default": 30077, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "portalHttpPort", + "label": "Portal HTTP Port", + "description": "The port to use for Omada Controller HTTP portal.", + "schema": { + "type": "int", + "default": 30078, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "portalHttpsPort", + "label": "Portal HTTPS Port", + "description": "The port to use for Omada Controller HTTPS portal.", + "schema": { + "type": "int", + "default": 30079, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "appDiscoveryPort", + "label": "App Discovery Port", + "description": "The port to use for Omada Controller App Discovery.", + "schema": { + "type": "int", + "default": 27001, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "discoveryPort", + "label": "Discovery Port", + "description": "The port to use for Omada Controller Discovery.", + "schema": { + "type": "int", + "default": 29810, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "managerV1Port", + "label": "Manager v1 Port", + "description": "The port to use for Omada Controller Manager v1.", + "schema": { + "type": "int", + "default": 29811, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "adoptV1Port", + "label": "Adopt v1 Port", + "description": "The port to use for Omada Controller Adopt v1.", + "schema": { + "type": "int", + "default": 29812, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "upgradeV1Port", + "label": "Upgrade v1 Port", + "description": "The port to use for Omada Controller Upgrade v1.", + "schema": { + "type": "int", + "default": 29813, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "managerV2Port", + "label": "Manager v2 Port", + "description": "The port to use for Omada Controller Manager v2.", + "schema": { + "type": "int", + "default": 29814, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Omada Controller
", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network.
s\nThis might be required for specific features to work.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "omadaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Omada Controller Data Storage", + "description": "The path to store Omada Controller Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "logs", + "label": "Omada Controller Logs Storage", + "description": "The path to store Omada Controller Logs.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "logs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Omada Controller.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Omada Controller.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Omada Controller.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Omada Controller

\n

Omada Controller is a network management controller for Omada (TP-Link) Equipment.

", + "detailed_readme": "

Omada Controller

\n

Omada Controller is a network management controller for Omada (TP-Link) Equipment.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/overseerr/app_versions.json b/community/overseerr/app_versions.json new file mode 100644 index 0000000000..3f42818a8d --- /dev/null +++ b/community/overseerr/app_versions.json @@ -0,0 +1,362 @@ +{ + "1.0.16": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/overseerr/1.0.16", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.33.2_1.0.16", + "version": "1.0.16", + "chart_metadata": { + "name": "overseerr", + "description": "Overseerr is a free and open source software application for managing requests for your media library.", + "annotations": { + "title": "Overseerr" + }, + "type": "application", + "version": "1.0.16", + "apiVersion": "v2", + "appVersion": "1.33.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/sct/overseerr", + "icon": "https://media.sys.truenas.net/apps/overseerr/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/sctx/overseerr", + "https://github.com/truenas/charts/tree/master/community/overseer", + "https://github.com/sct/overseerr" + ], + "keywords": [ + "media" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "overseerr", + "groupName": "overseerr", + "gid": 568, + "uid": 568, + "description": "Overseerr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Overseerr Configuration", + "description": "Configure Overseerr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Overseerr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Overseerr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Overseerr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Overseerr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Overseerr Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "overseerrConfig", + "label": "", + "group": "Overseerr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Overseerr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "overseerrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Overseerr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Overseerr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "overseerrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Overseerr Web UI.", + "schema": { + "type": "int", + "default": 30023, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "overseerrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Overseerr Config Storage", + "description": "The path to store Overseerr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Overseerr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Overseerr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Overseerr

\n

Overseerr is a free and open source software application for managing requests for your media library. It integrates with your existing services, such as Sonarr, Radarr, and Plex!

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Overseerr directories.\nAfterward, the Overseerr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Overseerr

\n

Overseerr is a free and open source software application for managing requests for your media library. It integrates with your existing services, such as Sonarr, Radarr, and Plex!

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Overseerr directories.\nAfterward, the Overseerr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/paperless-ngx/app_versions.json b/community/paperless-ngx/app_versions.json new file mode 100644 index 0000000000..26f6c88076 --- /dev/null +++ b/community/paperless-ngx/app_versions.json @@ -0,0 +1,970 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/paperless-ngx/1.1.2", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.17.4_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "paperless-ngx", + "description": "Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.", + "annotations": { + "title": "Paperless-ngx" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "1.17.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://docs.paperless-ngx.com", + "icon": "https://media.sys.truenas.net/apps/paperless-ngx/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/paperlessngx/paperless-ngx", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/paperless-ngx", + "https://github.com/paperless-ngx/paperless-ngx" + ], + "keywords": [ + "document", + "management" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Paperless-ngx can runs as root user." + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + }, + { + "userName": "redis", + "groupName": "redis", + "gid": 1001, + "uid": 0, + "description": "Redis runs as a non-root user and root group." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Paperless-ngx is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Paperless-ngx is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Paperless-ngx is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Paperless-ngx is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Paperless-ngx is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Paperless-ngx Configuration", + "description": "Configure Paperless-ngx" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Paperless-ngx" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Paperless-ngx" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Paperless-ngx" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Paperless-ngx" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Paperless-ngx Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "paperlessConfig", + "label": "", + "group": "Paperless-ngx Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "adminUser", + "label": "Admin User", + "description": "The admin user for Paperless-ngx.
\nIt is only used for the initial installation.\n", + "schema": { + "type": "string", + "default": "", + "immutable": true, + "required": true + } + }, + { + "variable": "adminPassword", + "label": "Admin Password", + "description": "The admin password for Paperless-ngx.
\nIt is only used for the initial installation.\n", + "schema": { + "type": "string", + "default": "", + "immutable": true, + "required": true, + "private": true + } + }, + { + "variable": "adminMail", + "label": "Admin Mail", + "description": "The admin mail for Paperless-ngx.
\nIt is only used for the initial installation.\n", + "schema": { + "type": "string", + "default": "", + "immutable": true, + "required": true + } + }, + { + "variable": "enableTrash", + "label": "Enable Trash", + "description": "Enable the trash feature for Paperless-ngx.
\nWhen enabled, documents will be moved to the trash instead of being deleted.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Paperless-ngx.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "paperlessID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Paperless-ngx files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Paperless-ngx files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "paperlessNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Paperless-ngx Web UI.", + "schema": { + "type": "int", + "default": 30070, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "paperlessStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Paperless-ngx Data Storage", + "description": "The path to store Paperless-ngx Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "media", + "label": "Paperless-ngx Media Storage", + "description": "The path to store Paperless-ngx Media.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "media", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "consume", + "label": "Paperless-ngx Consumption Storage", + "description": "The path to store Paperless-ngx Data for Consumption.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "consume", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "trash", + "label": "Paperless-ngx Trash Storage", + "description": "The path to store Paperless-ngx Trash.
\nThis is only used when the trash feature is enabled.\n", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "trash", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Paperless-ngx Postgres Data Storage", + "description": "The path to store Paperless-ngx Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Paperless-ngx Postgres Backup Storage", + "description": "The path to store Paperless-ngx Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Paperless-ngx.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Paperless-ngx.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Paperless-ngx.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Paperless-ngx

\n

Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.

", + "detailed_readme": "

Paperless-ngx

\n

Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/passbolt/app_versions.json b/community/passbolt/app_versions.json new file mode 100644 index 0000000000..bfc5207b59 --- /dev/null +++ b/community/passbolt/app_versions.json @@ -0,0 +1,733 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/passbolt/1.1.2", + "last_update": "2023-11-08 12:52:59", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "4.4.0.1_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "passbolt", + "description": "Passbolt is a security-first, open source password manager", + "annotations": { + "title": "Passbolt" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "4.4.0.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://www.passbolt.com", + "icon": "https://media.sys.truenas.net/apps/passbolt/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/passbolt/passbolt", + "https://github.com/truenas/charts/tree/master/community/passbolt", + "https://www.passbolt.com" + ], + "keywords": [ + "password", + "manager" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "www-data", + "groupName": "www-data", + "gid": 33, + "uid": 33, + "description": "Passbolt run as a non-root user" + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Passbolt Configuration", + "description": "Configure Passbolt" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Passbolt" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Passbolt" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Passbolt" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "passboltConfig", + "label": "", + "group": "Passbolt Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "appUrl", + "label": "App URL", + "description": "The URL for the Passbolt WebUI.
\nFormat is: https://sub.domain.tld:port\n", + "schema": { + "type": "uri", + "default": "", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Passbolt.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "passboltNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Passbolt WebUI.", + "schema": { + "type": "int", + "default": 30097, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Passbolt.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "passboltStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "gpg", + "label": "Passbolt GPG Storage", + "description": "The path to store Passbolt GPG.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "gpg", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "jwt", + "label": "Passbolt JWT Storage", + "description": "The path to store Passbolt JWT.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "jwt", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbData", + "label": "Passbolt MariaDB Data Storage", + "description": "The path to store Passbolt MariaDB Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbBackup", + "label": "Passbolt MariaDB Backup Storage", + "description": "The path to store Passbolt MariaDB Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Passbolt.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Passbolt.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Passbolt.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Passbolt

\n

Passbolt is a security-first, open source password manager

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Passbolt directories.\nAfterward, the Passbolt container will run as a non-root user (33).\nSame applies to the mariadb container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the mariadb backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the Passbolt and mariadb data directories.

\n
\n

Register admin user

\n

Connect to the container's shell and run the following command replacing the\nvalues (user@example.com, first_name, last_name) with your own values.

\n

shell\n/usr/share/php/passbolt/bin/cake passbolt register_user -r admin \\\n -u user@example.com -f first_name -l last_name

", + "detailed_readme": "

Passbolt

\n

Passbolt is a security-first, open source password manager

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Passbolt directories.\nAfterward, the Passbolt container will run as a non-root user (33).\nSame applies to the mariadb container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the mariadb backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the Passbolt and mariadb data directories.

\n
\n

Register admin user

\n

Connect to the container's shell and run the following command replacing the\nvalues (user@example.com, first_name, last_name) with your own values.

\n

shell\n/usr/share/php/passbolt/bin/cake passbolt register_user -r admin \\\n -u user@example.com -f first_name -l last_name

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/pgadmin/app_versions.json b/community/pgadmin/app_versions.json new file mode 100644 index 0000000000..a75bcf4862 --- /dev/null +++ b/community/pgadmin/app_versions.json @@ -0,0 +1,538 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/pgadmin/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "7.8_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "pgadmin", + "description": "pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL", + "annotations": { + "title": "pgAdmin" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "7.8", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.pgadmin.org/", + "icon": "https://media.sys.truenas.net/apps/pgadmin/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/dpage/pgadmin4", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/pgadmin", + "https://www.pgadmin.org/" + ], + "keywords": [ + "database", + "management" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "pgadmin", + "groupName": "pgadmin", + "gid": 5050, + "uid": 5050, + "description": "pgAdmin runs as a non-root user." + } + ], + "capabilities": [ + { + "name": "NET_BIND_SERVICE", + "description": "pgAdmin requires this ability to bind to privileged ports." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "pgAdmin Configuration", + "description": "Configure pgAdmin" + }, + { + "name": "Network Configuration", + "description": "Configure Network for pgAdmin" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for pgAdmin" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for pgAdmin" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "pgadminConfig", + "label": "", + "group": "pgAdmin Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "adminEmail", + "label": "Admin Email", + "description": "The email address for the pgAdmin admin user.", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "adminPassword", + "label": "Admin Password", + "description": "The password for the pgAdmin admin user.", + "schema": { + "type": "string", + "required": true, + "private": true, + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for pgAdmin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "pgadminNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the pgAdmin Web UI.", + "schema": { + "type": "int", + "default": 30056, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for pgAdmin", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "pgadminStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "pgAdmin Config Storage", + "description": "The path to store pgAdmin Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for pgAdmin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for pgAdmin.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for pgAdmin.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

pgAdmin

\n

pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the pgAdmin directories.\nAfterward, the pgAdmin container will run as a non-root user (5050).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

pgAdmin

\n

pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the pgAdmin directories.\nAfterward, the pgAdmin container will run as a non-root user (5050).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/pigallery2/app_versions.json b/community/pigallery2/app_versions.json new file mode 100644 index 0000000000..81d88f4deb --- /dev/null +++ b/community/pigallery2/app_versions.json @@ -0,0 +1,742 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/pigallery2/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2.0.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "pigallery2", + "description": "PiGallery2 is a fast directory-first photo gallery website, with rich UI, optimized for running on low resource servers", + "annotations": { + "title": "PiGallery2" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "2.0.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://bpatrik.github.io/pigallery2", + "icon": "https://media.sys.truenas.net/apps/pigallery2/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/bpatrik/pigallery2", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/pigallery2", + "https://github.com/bpatrik/pigallery2" + ], + "keywords": [ + "media", + "photo" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "pigallery", + "groupName": "pigallery", + "gid": 568, + "uid": 568, + "description": "PiGallery2 can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "PiGallery2 Configuration", + "description": "Configure PiGallery2" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for PiGallery2" + }, + { + "name": "Network Configuration", + "description": "Configure Network for PiGallery2" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for PiGallery2" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for PiGallery2" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "pigalleryConfig", + "label": "", + "group": "PiGallery2 Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "applicationTitle", + "label": "Application Title", + "description": "The title of the PiGallery2 application.", + "schema": { + "type": "string", + "default": "PiGallery 2", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for PiGallery2.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "pigalleryRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that PiGallery2 will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that PiGallery2 will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "pigalleryNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the PiGallery2 Web UI.", + "schema": { + "type": "int", + "default": 30099, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pigalleryStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "PiGallery2 Config Storage", + "description": "The path to store PiGallery2 Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "db", + "label": "PiGallery2 Database Storage", + "description": "The path to store PiGallery2 Database.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "db", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "media", + "label": "PiGallery2 Media Storage", + "description": "The path to store PiGallery2 Media.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "media", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "thumbnails", + "label": "PiGallery2 Thumbnails Storage", + "description": "The path to store PiGallery2 Thumbnails.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "thumbnails", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for PiGallery2.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for PiGallery2.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for PiGallery2.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

PiGallery2

\n

PiGallery2 is a fast directory-first photo gallery website, with rich UI, optimized for running on low resource servers

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the PiGallery2 directories.\nAfterward, the PiGallery2 container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

PiGallery2

\n

PiGallery2 is a fast directory-first photo gallery website, with rich UI, optimized for running on low resource servers

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the PiGallery2 directories.\nAfterward, the PiGallery2 container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/piwigo/app_versions.json b/community/piwigo/app_versions.json new file mode 100644 index 0000000000..ffe84c3965 --- /dev/null +++ b/community/piwigo/app_versions.json @@ -0,0 +1,1074 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/piwigo/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "13.8.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "piwigo", + "description": "Piwigo is a photo gallery software for the web that comes with powerful features to publish and manage your collection of pictures.", + "annotations": { + "title": "Piwigo" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "13.8.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://piwigo.org", + "icon": "https://media.sys.truenas.net/apps/piwigo/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/linuxserver/piwigo", + "https://github.com/truenas/charts/tree/master/community/piwigo" + ], + "keywords": [ + "gallery", + "photo" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Piwigo run as root user" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Piwigo is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Piwigo is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Piwigo is able bypass permission checks for it's sub-processes." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Piwigo requires this ability to bind to port 80 within the container." + }, + { + "name": "SETGID", + "description": "Piwigo is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Piwigo is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Piwigo Configuration", + "description": "Configure Piwigo" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Piwigo" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Piwigo" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Piwigo" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Piwigo" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "piwiConfig", + "label": "", + "group": "Piwigo Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "adminName", + "label": "Admin Name", + "description": "The admin name for Piwigo.
\nOnly used when Piwigo is first installed.
\nYou can change it later in the Piwigo WebUI.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "" + } + }, + { + "variable": "adminMail", + "label": "Admin Mail", + "description": "The admin mail for Piwigo.
\nOnly used when Piwigo is first installed.
\nYou can change it later in the Piwigo WebUI.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "" + } + }, + { + "variable": "adminPass", + "label": "Admin Password", + "description": "The admin password for Piwigo.
\nOnly used when Piwigo is first installed.
\nYou can change it later in the Piwigo WebUI.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "password": true, + "default": "" + } + }, + { + "variable": "language", + "label": "Language", + "description": "The language for Piwigo.
\nOnly used when Piwigo is first installed.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "en_UK", + "enum": [ + { + "value": "af_ZA", + "description": "Afrikaans [ZA]" + }, + { + "value": "es_AR", + "description": "Argentina [AR]" + }, + { + "value": "az_AZ", + "description": "Az\u0259rbaycanca [AZ]" + }, + { + "value": "id_ID", + "description": "Bahasa Indonesia [ID]" + }, + { + "value": "pt_BR", + "description": "Brasil [BR]" + }, + { + "value": "br_FR", + "description": "Brezhoneg [FR]" + }, + { + "value": "ca_ES", + "description": "Catal\u00e0 [CA]" + }, + { + "value": "da_DK", + "description": "Dansk [DK]" + }, + { + "value": "de_DE", + "description": "Deutsch [DE]" + }, + { + "value": "dv_MV", + "description": "Dhivehi [MV]" + }, + { + "value": "en_GB", + "description": "English [GB]" + }, + { + "value": "en_UK", + "description": "English [UK]" + }, + { + "value": "en_US", + "description": "English [US]" + }, + { + "value": "es_ES", + "description": "Espa\u00f1ol [ES]" + }, + { + "value": "eo_EO", + "description": "Esperanto [EO]" + }, + { + "value": "et_EE", + "description": "Estonian [EE]" + }, + { + "value": "eu_ES", + "description": "Euskara [ES]" + }, + { + "value": "fi_FI", + "description": "Finnish [FI]" + }, + { + "value": "fr_FR", + "description": "Fran\u00e7ais [FR]" + }, + { + "value": "fr_CA", + "description": "Fran\u00e7ais [QC]" + }, + { + "value": "ga_IE", + "description": "Gaeilge [IE]" + }, + { + "value": "gl_ES", + "description": "Galego [ES]" + }, + { + "value": "hr_HR", + "description": "Hrvatski [HR]" + }, + { + "value": "it_IT", + "description": "Italiano [IT]" + }, + { + "value": "lv_LV", + "description": "Latvie\u0161u [LV]" + }, + { + "value": "lt_LT", + "description": "Lietuviu [LT]" + }, + { + "value": "lb_LU", + "description": "L\u00ebtzebuergesch [LU]" + }, + { + "value": "hu_HU", + "description": "Magyar [HU]" + }, + { + "value": "ms_MY", + "description": "Malay [MY]" + }, + { + "value": "es_MX", + "description": "M\u00e9xico [MX]" + }, + { + "value": "nl_NL", + "description": "Nederlands [NL]" + }, + { + "value": "nb_NO", + "description": "Norsk bokm\u00e5l [NO]" + }, + { + "value": "nn_NO", + "description": "Norwegian nynorsk [NO]" + }, + { + "value": "pl_PL", + "description": "Polski [PL]" + }, + { + "value": "pt_PT", + "description": "Portugu\u00eas [PT]" + }, + { + "value": "ro_RO", + "description": "Rom\u00e2n\u0103 [RO]" + }, + { + "value": "sk_SK", + "description": "Slovensky [SK]" + }, + { + "value": "sl_SI", + "description": "Sloven\u0161cina [SI]" + }, + { + "value": "sh_RS", + "description": "Srpski [SR]" + }, + { + "value": "sv_SE", + "description": "Svenska [SE]" + }, + { + "value": "vi_VN", + "description": "Ti\u1ebfng Vi\u1ec7t [VN]" + }, + { + "value": "tr_TR", + "description": "T\u00fcrk\u00e7e [TR]" + }, + { + "value": "wo_SN", + "description": "Wolof [SN]" + }, + { + "value": "is_IS", + "description": "\u00cdslenska [IS]" + }, + { + "value": "cs_CZ", + "description": "\u010cesky [CZ]" + }, + { + "value": "el_GR", + "description": "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac [GR]" + }, + { + "value": "bg_BG", + "description": "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 [BG]" + }, + { + "value": "mk_MK", + "description": "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 [MK]" + }, + { + "value": "mn_MN", + "description": "\u041c\u043e\u043d\u0433\u043e\u043b [MN]" + }, + { + "value": "ru_RU", + "description": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439 [RU]" + }, + { + "value": "sr_RS", + "description": "\u0421\u0440\u043f\u0441\u043a\u0438 [SR]" + }, + { + "value": "uk_UA", + "description": "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 [UA]" + }, + { + "value": "he_IL", + "description": "\u05e2\u05d1\u05e8\u05d9\u05ea [IL]" + }, + { + "value": "ar_EG", + "description": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0645\u0635" + }, + { + "value": "ar_SA", + "description": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 [AR]" + }, + { + "value": "ar_MA", + "description": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 [MA]" + }, + { + "value": "fa_IR", + "description": "\u067e\u0627\u0631\u0633\u06cc [IR]" + }, + { + "value": "kok_IN", + "description": "\u0915\u094b\u0902\u0915\u0923\u0940 [IN]" + }, + { + "value": "bn_IN", + "description": "\u09ac\u09be\u0982\u09b2\u09be[IN]" + }, + { + "value": "gu_IN", + "description": "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0[IN]" + }, + { + "value": "ta_IN", + "description": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd [IN]" + }, + { + "value": "kn_IN", + "description": "\u0c95\u0ca8\u0ccd\u0ca8\u0ca1 [IN]" + }, + { + "value": "th_TH", + "description": "\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22 [TH]" + }, + { + "value": "ka_GE", + "description": "\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8 [GE]" + }, + { + "value": "km_KH", + "description": "\u1781\u17d2\u1798\u17c2\u179a [KH]" + }, + { + "value": "zh_TW", + "description": "\u4e2d\u6587 (\u7e41\u9ad4) [TW]" + }, + { + "value": "zh_HK", + "description": "\u4e2d\u6587 (\u9999\u6e2f) [HK]" + }, + { + "value": "ja_JP", + "description": "\u65e5\u672c\u8a9e [JP]" + }, + { + "value": "zh_CN", + "description": "\u7b80\u4f53\u4e2d\u6587 [CN]" + }, + { + "value": "ko_KR", + "description": "\ud55c\uad6d\uc5b4 [KR]" + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Piwigo.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "piwiID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Piwigo files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Piwigo files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "piwiNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Piwigo WebUI.", + "schema": { + "type": "int", + "default": 30066, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "piwiStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Piwigo Configuration Storage", + "description": "The path to store Piwigo configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "gallery", + "label": "Piwigo Gallery Storage", + "description": "The path to store Piwigo gallery.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "gallery", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbData", + "label": "Piwigo MariaDB Data Storage", + "description": "The path to store Piwigo MariaDB Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbBackup", + "label": "Piwigo MariaDB Backup Storage", + "description": "The path to store Piwigo MariaDB Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Piwigo.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Piwigo.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Piwigo.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Piwigo

\n

Piwigo is a photo gallery software for the web that comes with powerful features to\npublish and manage your collection of pictures.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the mariadb directories.\nAfterwards mariadb will start as a non-root user (999).>\nOn each upgrade, a container will be launched with root privileges in order to\napply the correct permissions to the mariadb backups directory.\nContainer that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the mariadb data directories.

\n
", + "detailed_readme": "

Piwigo

\n

Piwigo is a photo gallery software for the web that comes with powerful features to\npublish and manage your collection of pictures.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the mariadb directories.\nAfterwards mariadb will start as a non-root user (999).>\nOn each upgrade, a container will be launched with root privileges in order to\napply the correct permissions to the mariadb backups directory.\nContainer that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the mariadb data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/planka/app_versions.json b/community/planka/app_versions.json new file mode 100644 index 0000000000..59a335ed34 --- /dev/null +++ b/community/planka/app_versions.json @@ -0,0 +1,843 @@ +{ + "1.1.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/planka/1.1.3", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.14.3_1.1.3", + "version": "1.1.3", + "chart_metadata": { + "name": "planka", + "description": "Planka is an Elegant open source project tracking", + "annotations": { + "title": "Planka" + }, + "type": "application", + "version": "1.1.3", + "apiVersion": "v2", + "appVersion": "1.14.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://github.com/plankanban/planka", + "icon": "https://media.sys.truenas.net/apps/planka/icons/icon.png", + "sources": [ + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/planka", + "https://github.com/plankanban/planka" + ], + "keywords": [ + "project", + "task", + "kanban" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "planka", + "groupName": "planka", + "gid": 1000, + "uid": 1000, + "description": "Planka can runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Planka Configuration", + "description": "Configure Planka" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Planka" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Planka" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Planka" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "plankaConfig", + "label": "", + "group": "Planka Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "defaultAdminEmail", + "label": "Default Admin Email", + "description": "The default admin email for Planka.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "defaultAdminName", + "label": "Default Admin Name", + "description": "The default admin name for Planka.", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "defaultAdminEmail", + "!=", + "" + ] + ], + "required": true + } + }, + { + "variable": "defaultAdminPassword", + "label": "Default Admin Password", + "description": "The default admin password for Planka.", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "defaultAdminEmail", + "!=", + "" + ] + ], + "required": true + } + }, + { + "variable": "defaultAdminUsername", + "label": "Default Admin Username", + "description": "The default admin username for Planka.", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "defaultAdminEmail", + "!=", + "" + ] + ], + "required": true + } + }, + { + "variable": "baseURL", + "label": "BaseURL", + "description": "The URL that Planka will be accessible from.
\nExample:
\nhttp://server.ip:30062
\nhttps://planka.example.com\n", + "schema": { + "type": "uri", + "default": "", + "required": true + } + }, + { + "variable": "trustProxy", + "label": "Trust Proxy", + "description": "Trust the reverse proxy when Planka is behind a reverse proxy.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Planka.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "plankaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Planka Web UI.", + "schema": { + "type": "int", + "default": 30062, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "plankaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "avatars", + "label": "Planka Avatars Storage", + "description": "The path to store Planka Avatars.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "avatars", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "backgroundImages", + "label": "Planka Background Images Storage", + "description": "The path to store Planka Background Images.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "bg-img", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "attachments", + "label": "Planka Attachments Storage", + "description": "The path to store Planka Attachments.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "attachments", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Postgres Data Storage", + "description": "The path to store Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Postgres Backup Storage", + "description": "The path to store Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Planka.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Planka.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Planka.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Planka

\n

Planka is an Elegant open source project tracking

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Planka directories.\nAfterward, the Planka container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Planka

\n

Planka is an Elegant open source project tracking

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Planka directories.\nAfterward, the Planka container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/plex-auto-languages/app_versions.json b/community/plex-auto-languages/app_versions.json new file mode 100644 index 0000000000..9774512660 --- /dev/null +++ b/community/plex-auto-languages/app_versions.json @@ -0,0 +1,521 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/plex-auto-languages/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.2.3_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "plex-auto-languages", + "description": "Plex Auto Languages offer automated language selection for Plex TV Shows", + "annotations": { + "title": "Plex Auto Languages" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "1.2.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/RemiRigal/Plex-Auto-Languages", + "icon": "https://localhost/no-icon", + "sources": [ + "https://github.com/RemiRigal/Plex-Auto-Languages", + "https://github.com/truenas/charts/tree/master/community/plex-auto-languages", + "https://hub.docker.com/r/remirigal/plex-auto-languages" + ], + "keywords": [ + "plex", + "languages" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "plex-auto-languages", + "groupName": "plex-auto-languages", + "gid": 568, + "uid": 568, + "description": "Plex Auto Languages can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Plex Auto Language Configuration", + "description": "Configure Plex Auto Language" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Plex Auto Language" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Plex Auto Language" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Plex Auto Language" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "Plex Auto Language Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "palConfig", + "label": "", + "group": "Plex Auto Language Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "plexURL", + "label": "Plex URL", + "description": "The URL to your Plex server.", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "plexToken", + "label": "Plex Token", + "description": "The token to your Plex server.
\nMore information on how to get your\ntoken can be found here https://github.com/RemiRigal/Plex-Auto-Languages#getting-started\n", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Plex Auto Language.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "palRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Plex Auto Language will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Plex Auto Language will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "palStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Plex Auto Language Config Storage", + "description": "The path to store Plex Auto Language Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Plex Auto Language.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Plex Auto Language.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Plex Auto Language.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Plex Auto Languages

\n

Plex Auto Languages offer automated language selection for Plex TV Shows

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Plex Auto Languages directories.\nAfterward, the Plex Auto Languages container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Plex Auto Languages

\n

Plex Auto Languages offer automated language selection for Plex TV Shows

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Plex Auto Languages directories.\nAfterward, the Plex Auto Languages container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/prowlarr/app_versions.json b/community/prowlarr/app_versions.json new file mode 100644 index 0000000000..9a72c75652 --- /dev/null +++ b/community/prowlarr/app_versions.json @@ -0,0 +1,537 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/prowlarr/1.1.2", + "last_update": "2023-10-30 08:09:16", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.10.1.4059_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "prowlarr", + "description": "Prowlarr is an indexer manager/proxy to integrate with your various PVR apps.", + "annotations": { + "title": "Prowlarr" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "1.10.1.4059", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://prowlarr.com/", + "icon": "https://media.sys.truenas.net/apps/prowlarr/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/prowlarr", + "https://github.com/truenas/charts/tree/master/community/prowlarr", + "https://github.com/Prowlarr/Prowlarr" + ], + "keywords": [ + "indexer" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "prowlarr", + "groupName": "prowlarr", + "gid": 568, + "uid": 568, + "description": "Prowlarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Prowlarr Configuration", + "description": "Configure Prowlarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Prowlarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Prowlarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Prowlarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Prowlarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "prowlarrConfig", + "label": "", + "group": "Prowlarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the Prowlarr instance.", + "schema": { + "type": "string", + "default": "Prowlarr", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Prowlarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "prowlarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Prowlarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Prowlarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "prowlarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Prowlarr Web UI.", + "schema": { + "type": "int", + "default": 30050, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "prowlarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Prowlarr Config Storage", + "description": "The path to store Prowlarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Prowlarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Prowlarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Prowlarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Prowlarr

\n

Prowlarr is a music collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Prowlarr directories.\nAfterward, the Prowlarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Prowlarr

\n

Prowlarr is a music collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Prowlarr directories.\nAfterward, the Prowlarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/qbittorrent/app_versions.json b/community/qbittorrent/app_versions.json new file mode 100644 index 0000000000..4346b4e223 --- /dev/null +++ b/community/qbittorrent/app_versions.json @@ -0,0 +1,609 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/qbittorrent/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "4.6.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "qbittorrent", + "description": "The qBittorrent project aims to provide an open-source software alternative to \u00b5Torrent.", + "annotations": { + "title": "qBittorrent" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "4.6.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.qbittorrent.org/", + "icon": "https://media.sys.truenas.net/apps/qbittorrent/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/qbittorrent", + "https://github.com/truenas/charts/tree/master/community/qbittorrent", + "https://www.qbittorrent.org/" + ], + "keywords": [ + "media", + "torrent", + "download" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "qbittorrent", + "groupName": "qbittorrent", + "gid": 568, + "uid": 568, + "description": "qBittorrent can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "qBittorrent Configuration", + "description": "Configure qBittorrent" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for qBittorrent" + }, + { + "name": "Network Configuration", + "description": "Configure Network for qBittorrent" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for qBittorrent" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for qBittorrent" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "qbitConfig", + "label": "", + "group": "qBittorrent Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for qBittorrent.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "qbitRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that qBittorrent will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that qBittorrent will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "qbitNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the qBittorrent Web UI.", + "schema": { + "type": "int", + "default": 30024, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "btPort", + "label": "BT Port", + "description": "The port for the qBittorrent BitTorrent protocol. Both TCP and UDP", + "schema": { + "type": "int", + "default": 50413, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "qbitStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "downloads", + "label": "qBittorrent Downloads Storage", + "description": "The path to store qBittorrent Downloads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "downloads", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "config", + "label": "qBittorrent Config Storage", + "description": "The path to store qBittorrent Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "qBittorrent additional storage", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "Resources Configuration", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for qBittorrent.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for qBittorrent.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

qBittorrent

\n

The qBittorrent project aims to provide an open-source software alternative to \u00b5Torrent.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the qBittorrent directories.\nAfterward, the qBittorrent container will run as a non-root user (Default: 568).

\n
", + "detailed_readme": "

qBittorrent

\n

The qBittorrent project aims to provide an open-source software alternative to \u00b5Torrent.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the qBittorrent directories.\nAfterward, the qBittorrent container will run as a non-root user (Default: 568).

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/radarr/app_versions.json b/community/radarr/app_versions.json new file mode 100644 index 0000000000..452bfc6024 --- /dev/null +++ b/community/radarr/app_versions.json @@ -0,0 +1,538 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/radarr/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "5.0.3.8127_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "radarr", + "description": "Radarr is a movie collection manager for Usenet and BitTorrent users.", + "annotations": { + "title": "Radarr" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "5.0.3.8127", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/Radarr/Radarr", + "icon": "https://media.sys.truenas.net/apps/radarr/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/radarr", + "https://github.com/truenas/charts/tree/master/community/radarr", + "https://github.com/Radarr/Radarr" + ], + "keywords": [ + "media", + "movies" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "radarr", + "groupName": "radarr", + "gid": 568, + "uid": 568, + "description": "Radarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Radarr Configuration", + "description": "Configure Radarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Radarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Radarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Radarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Radarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "radarrConfig", + "label": "", + "group": "Radarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the Radarr instance.", + "schema": { + "type": "string", + "default": "Radarr", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Radarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "radarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Radarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Radarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "radarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Radarr Web UI.", + "schema": { + "type": "int", + "default": 30025, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "radarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Radarr Config Storage", + "description": "The path to store Radarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Radarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Radarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Radarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Radarr

\n

Radarr is a movie collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Radarr directories.\nAfterward, the Radarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Radarr

\n

Radarr is a movie collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Radarr directories.\nAfterward, the Radarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/readarr/app_versions.json b/community/readarr/app_versions.json new file mode 100644 index 0000000000..644c34329b --- /dev/null +++ b/community/readarr/app_versions.json @@ -0,0 +1,539 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/readarr/1.1.2", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "0.3.10.2287_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "readarr", + "description": "Readarr is an ebook and audiobook collection manager for Usenet and BitTorrent users.", + "annotations": { + "title": "Readarr" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "0.3.10.2287", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://github.com/Readarr/Readarr", + "icon": "https://media.sys.truenas.net/apps/readarr/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/readarr", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/readarr", + "https://github.com/Readarr/Readarr" + ], + "keywords": [ + "media", + "ebook", + "audiobook" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "readarr", + "groupName": "readarr", + "gid": 568, + "uid": 568, + "description": "Readarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Readarr Configuration", + "description": "Configure Readarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Readarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Readarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Readarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Readarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "readarrConfig", + "label": "", + "group": "Readarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the Readarr instance.", + "schema": { + "type": "string", + "default": "Readarr", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Readarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "readarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Readarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Readarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "readarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Readarr Web UI.", + "schema": { + "type": "int", + "default": 30045, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "readarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Readarr Config Storage", + "description": "The path to store Readarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Readarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Readarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Readarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Readarr

\n

Readarr is an ebook and audiobook collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Readarr directories.\nAfterward, the Readarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Readarr

\n

Readarr is an ebook and audiobook collection manager for Usenet and BitTorrent users.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Readarr directories.\nAfterward, the Readarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/recyclarr/app_versions.json b/community/recyclarr/app_versions.json new file mode 100644 index 0000000000..037f5507d2 --- /dev/null +++ b/community/recyclarr/app_versions.json @@ -0,0 +1,523 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/recyclarr/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "6.0.2_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "recyclarr", + "description": "Recyclarr synchronizes recommended settings from the TRaSH guides to your Sonarr/Radarr instances.", + "annotations": { + "title": "Recyclarr" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "6.0.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://recyclarr.dev", + "icon": "https://media.sys.truenas.net/apps/recyclarr/icons/icon.png", + "sources": [ + "https://recyclarr.dev", + "https://github.com/truenas/charts/tree/master/community/recyclarr", + "https://github.com/recyclarr/recyclarr/tree/recyclarr" + ], + "keywords": [ + "media", + "sonarr", + "radarr" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "recyclarr", + "groupName": "recyclarr", + "gid": 568, + "uid": 568, + "description": "Recyclarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Recyclarr Configuration", + "description": "Configure Recyclarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Recyclarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Recyclarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Recyclarr" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "Recyclarr Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "recyclarrConfig", + "label": "", + "group": "Recyclarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "createConfig", + "label": "Create Default Config", + "description": "Enable this if you want /config/recyclarr.yml to be created for\nyou automatically when the container starts.
\nIf the file already exists, it will not create the file again.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cronSchedule", + "label": "Cron Schedule", + "description": "The cron schedule to use for Recyclarr.\n", + "schema": { + "type": "string", + "default": "@daily", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Recyclarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "recyclarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Recyclarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Recyclarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "recyclarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Recyclarr Config Storage", + "description": "The path to store Recyclarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Recyclarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Recyclarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Recyclarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Recyclarr

\n

Recyclarr synchronizes recommended settings from the TRaSH guides to your Sonarr/Radarr instances.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Recyclarr directories.\nAfterward, the Recyclarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Recyclarr

\n

Recyclarr synchronizes recommended settings from the TRaSH guides to your Sonarr/Radarr instances.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Recyclarr directories.\nAfterward, the Recyclarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/redis/app_versions.json b/community/redis/app_versions.json new file mode 100644 index 0000000000..662332c112 --- /dev/null +++ b/community/redis/app_versions.json @@ -0,0 +1,281 @@ +{ + "1.0.12": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/redis/1.0.12", + "last_update": "2023-11-03 10:53:23", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "7.2.3_1.0.12", + "version": "1.0.12", + "chart_metadata": { + "name": "redis", + "description": "Redis. The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.", + "annotations": { + "title": "Redis" + }, + "type": "application", + "version": "1.0.12", + "apiVersion": "v2", + "appVersion": "7.2.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://redis.io/", + "icon": "https://media.sys.truenas.net/apps/redis/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/bitnami/redis", + "https://github.com/bitnami/containers/tree/main/bitnami/redis", + "https://redis.io/" + ], + "keywords": [ + "cache" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "redis", + "groupName": "root", + "gid": 1001, + "uid": 0, + "description": "Redis runs as a non-root user and root group." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Redis Configuration", + "description": "Configure Redis" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Redis" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Redis" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Redis" + } + ], + "questions": [ + { + "variable": "redisConfig", + "label": "", + "group": "Redis Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "allowEmptyPassword", + "label": "Allow Empty Password", + "description": "Allow empty password for Redis.
\nIt's recommended to keep this disabled.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "password", + "label": "Password", + "description": "Password for Redis.", + "schema": { + "type": "string", + "required": true, + "private": true, + "valid_chars": "^((?!@).)*$", + "valid_chars_error": "Character @ is not allowed in password", + "show_if": [ + [ + "allowEmptyPassword", + "=", + false + ] + ], + "default": "" + } + } + ] + } + }, + { + "variable": "redisNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "redisPort", + "label": "Redis Port", + "description": "The port for Redis.", + "schema": { + "type": "int", + "default": 30036, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "redisStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Redis Data Storage", + "description": "The path to store Redis Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Redis.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Redis.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Redis

\n

Redis. The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Redis directories.\nAfterward, the Redis container will run as a non-root user (1001) and root group.\nAll mounted storage(s) will be chowned only if the parent directory does not match 1001 user.

\n
", + "detailed_readme": "

Redis

\n

Redis. The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Redis directories.\nAfterward, the Redis container will run as a non-root user (1001) and root group.\nAll mounted storage(s) will be chowned only if the parent directory does not match 1001 user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/rsyncd/app_versions.json b/community/rsyncd/app_versions.json new file mode 100644 index 0000000000..b5f7217e1c --- /dev/null +++ b/community/rsyncd/app_versions.json @@ -0,0 +1,429 @@ +{ + "1.0.8": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/rsyncd/1.0.8", + "last_update": "2023-10-19 04:50:58", + "required_features": [], + "human_version": "1.0.0_1.0.8", + "version": "1.0.8", + "chart_metadata": { + "name": "rsyncd", + "description": "Rsync is an open source utility that provides fast incremental file transfer.", + "annotations": { + "title": "Rsync Daemon" + }, + "type": "application", + "version": "1.0.8", + "apiVersion": "v2", + "appVersion": "1.0.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/truenas/containers/tree/main/apps/rsyncd", + "icon": "https://media.sys.truenas.net/apps/rsyncd/icons/icon.png", + "sources": [ + "https://github.com/truenas/containers/tree/main/apps/rsyncd", + "https://github.com/truenas/charts/tree/master/community/rsyncd", + "https://hub.docker.com/r/ixsystems/rsyncd" + ], + "keywords": [ + "rsync", + "sync" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Rsync requires root privileges to start it's processes." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Rsync requires this ability to change ownership of files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Rsync requires this ability to override file permissions." + }, + { + "name": "FOWNER", + "description": "Rsync requires this ability to override file ownership." + }, + { + "name": "SETUID", + "description": "Rsync requires this ability to switch user for sub-processes." + }, + { + "name": "SETGID", + "description": "Rsync requires this ability to switch group for sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "Rsync requires this ability to use chroot for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Rsync Configuration", + "description": "Configure Rsync" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Rsync" + }, + { + "name": "Module Configuration", + "description": "Configure Modules for Rsync" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Rsync" + } + ], + "questions": [ + { + "variable": "rsyncConfig", + "label": "", + "group": "Rsync Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "auxParams", + "label": "Auxillary Parameters", + "description": "Configure auxillary parameters for Rsync.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "auxEntry", + "label": "Auxillary Parameter Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "param", + "label": "Parameter", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rsyncNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "rsyncPort", + "label": "Rsync Port", + "description": "The port for Rsync.", + "schema": { + "type": "int", + "default": 30026, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "rsyncModules", + "label": "", + "group": "Module Configuration", + "schema": { + "type": "list", + "default": [], + "empty": false, + "required": true, + "items": [ + { + "variable": "module", + "label": "Rsync Module", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Module Name", + "description": "Module name that matches the name requested by the rsync client.\n", + "schema": { + "type": "string", + "valid_chars": "^[a-zA-Z0-9]+([_-]*[a-zA-Z0-9]+)+$", + "valid_chars_error": "Module Name, can include [Letters (a-z, A-Z), Numbers (0,9), Underscore (_), Dash (-)],
\nbut cannot start or end with [Underscore (_), Dash (-), Dot (.)]\n", + "required": true + } + }, + { + "variable": "enabled", + "label": "Enable Module", + "schema": { + "type": "boolean", + "default": true, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "comment", + "label": "Comment", + "description": "Describe the module.", + "schema": { + "type": "string" + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The path on the host to be shared with the client.
\nThis path must exist on the host.\n", + "schema": { + "type": "hostpath", + "required": true + } + }, + { + "variable": "accessMode", + "label": "Access Mode", + "description": "Choose permissions for this rsync module.\n", + "schema": { + "type": "string", + "required": true, + "default": "RO", + "enum": [ + { + "value": "RO", + "description": "Read Only" + }, + { + "value": "RW", + "description": "Read Write" + }, + { + "value": "WO", + "description": "Write Only" + } + ] + } + }, + { + "variable": "maxConnections", + "label": "Max Connections", + "description": "Maximum number of simultaneous connections to this module.
\n0 means unlimited.\n", + "schema": { + "type": "int", + "min": 0, + "max": 1000, + "default": 0, + "required": true + } + }, + { + "variable": "uid", + "label": "UID", + "description": "The UID to use for this module.
\n", + "schema": { + "type": "int", + "min": 0, + "max": 65535, + "default": 568, + "required": true + } + }, + { + "variable": "gid", + "label": "GID", + "description": "The GID to use for this module.
\n", + "schema": { + "type": "int", + "min": 0, + "max": 65535, + "default": 568, + "required": true + } + }, + { + "variable": "hostsAllow", + "label": "Hosts Allow", + "description": "List of hosts allowed to connect to this module.
\nLeave empty to allow all hosts.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host to allow", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "hostsDeny", + "label": "Hosts Deny", + "description": "List of hosts denied to connect to this module.
\nLeave empty to deny no hosts.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host to deny", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "auxParams", + "label": "Auxillary Parameters", + "description": "Configure auxillary parameters for this module.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "auxEntry", + "label": "Auxillary Parameter Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "param", + "label": "Parameter", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Rsync.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Rsync.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Rsyncd

\n

Rsyncd is an open source utility that provides fast incremental file transfer.

", + "detailed_readme": "

Rsyncd

\n

Rsyncd is an open source utility that provides fast incremental file transfer.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/rust-desk/app_versions.json b/community/rust-desk/app_versions.json new file mode 100644 index 0000000000..72e08d522d --- /dev/null +++ b/community/rust-desk/app_versions.json @@ -0,0 +1,613 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/rust-desk/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.1.8-2_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "rust-desk", + "description": "Rust Desk is an open-source remote desktop, and alternative to TeamViewer.", + "annotations": { + "title": "Rust Desk" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "1.1.8-2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://rustdesk.com", + "icon": "https://media.sys.truenas.net/apps/rust-desk/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/rustdesk/rustdesk-server", + "https://github.com/truenas/charts/tree/master/community/rust-desk", + "https://github.com/rustdesk/rustdesk-server" + ], + "keywords": [ + "remote", + "desktop" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "rust-desk", + "groupName": "rust-desk", + "gid": 568, + "uid": 568, + "description": "Rust Desk can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Rust Desk Configuration", + "description": "Configure Rust Desk" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Rust Desk" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Rust Desk" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Rust Desk" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Rust Desk" + } + ], + "questions": [ + { + "variable": "rustConfig", + "label": "", + "group": "Rust Desk Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "allowOnlyEncryptedConnections", + "label": "Allow Only Encrypted Connections", + "description": "Allow only encrypted connections.
\nClients have to use the generated key to connect to the server.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalRelayServers", + "label": "Additional Relay Servers", + "description": "Configure additional relay servers for Rust Desk.
\nThe internal relay server will be added automatically.
\nFormat:
host:port\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "relayServer", + "label": "Relay Server", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Rust Desk.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rustRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Rust Desk will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Rust Desk will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "rustNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "natTypeTestPort", + "label": "NAT Type Test Port", + "description": "The port to use for NAT type test.
\nInternal port will always be 21115\n", + "schema": { + "type": "int", + "default": 21115, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "idRegHolePunchPort", + "label": "ID Registration and Hole Punching Port", + "description": "The port to use for ID registration and Hole punching.
\nInternal port will always be 21116 (TCP/UDP)\n", + "schema": { + "type": "int", + "default": 21116, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "relayPort", + "label": "Relay Port", + "description": "The port to use for relay.
\nInternal port will always be 21117\n", + "schema": { + "type": "int", + "default": 21117, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enableWebClientPorts", + "label": "Enable Web Client Ports", + "description": "Enable web client ports.
\nThis is only required for web clients.
\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "serverWebClientsPort", + "label": "Server Web Clients Port", + "description": "The port to use for server web clients.
\nInternal port will always be 21118\n", + "schema": { + "type": "int", + "default": 21118, + "min": 9000, + "max": 65535, + "required": true, + "show_if": [ + [ + "enableWebClientPorts", + "=", + true + ] + ] + } + }, + { + "variable": "relayWebClientsPort", + "label": "Relay Web Clients Port", + "description": "The port to use for relay web clients.
\nInternal port will always be 21119\n", + "schema": { + "type": "int", + "default": 21119, + "min": 9000, + "max": 65535, + "required": true, + "show_if": [ + [ + "enableWebClientPorts", + "=", + true + ] + ] + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "rustStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Rust Desk Data Storage", + "description": "The path to store Rust Desk Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Rust Desk.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Rust Desk.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Rust Desk.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Rust Desk

\n

Rust Desk is an open-source remote desktop, and alternative to TeamViewer.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Rust Desk directories.\nAfterward, the Rust Desk container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Rust Desk

\n

Rust Desk is an open-source remote desktop, and alternative to TeamViewer.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Rust Desk directories.\nAfterward, the Rust Desk container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/sabnzbd/app_versions.json b/community/sabnzbd/app_versions.json new file mode 100644 index 0000000000..edae9b3a4a --- /dev/null +++ b/community/sabnzbd/app_versions.json @@ -0,0 +1,529 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/sabnzbd/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "4.1.0_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "sabnzbd", + "description": "SABnzbd is an Open Source Binary Newsreader written in Python.", + "annotations": { + "title": "SABnzbd" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "4.1.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://sabnzbd.org/", + "icon": "https://media.sys.truenas.net/apps/sabnzbd/icons/icon.svg", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/sabnzbd", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/sabnzbd", + "https://github.com/Sabnzbd/Sabnzbd" + ], + "keywords": [ + "media", + "usenet", + "newsreader" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "sabnzbd", + "groupName": "sabnzbd", + "gid": 568, + "uid": 568, + "description": "Sabnzbd can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "SABnzbd Configuration", + "description": "Configure SABnzbd" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for SABnzbd" + }, + { + "name": "Network Configuration", + "description": "Configure Network for SABnzbd" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for SABnzbd" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for SABnzbd" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "sabnzbdConfig", + "label": "", + "group": "SABnzbd Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for SABnzbd.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "sabnzbdRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that SABnzbd will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that SABnzbd will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "sabnzbdNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the SABnzbd Web UI.", + "schema": { + "type": "int", + "default": 30055, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "sabnzbdStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "SABnzbd Config Storage", + "description": "The path to store SABnzbd Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for SABnzbd.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for SABnzbd.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for SABnzbd.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

SABnzbd

\n

SABnzbd is an Open Source Binary Newsreader written in Python.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the SABnzbd directories.\nAfterward, the SABnzbd container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

SABnzbd

\n

SABnzbd is an Open Source Binary Newsreader written in Python.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the SABnzbd directories.\nAfterward, the SABnzbd container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/searxng/app_versions.json b/community/searxng/app_versions.json new file mode 100644 index 0000000000..ef8a4dac23 --- /dev/null +++ b/community/searxng/app_versions.json @@ -0,0 +1,510 @@ +{ + "1.1.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/searxng/1.1.4", + "last_update": "2023-11-01 00:33:50", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2023.10.31_1.1.4", + "version": "1.1.4", + "chart_metadata": { + "name": "searxng", + "description": "SearXNG is a privacy-respecting, hackable metasearch engine", + "annotations": { + "title": "SearXNG" + }, + "type": "application", + "version": "1.1.4", + "apiVersion": "v2", + "appVersion": "2023.10.31", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://github.com/searxng/searxng", + "icon": "https://media.sys.truenas.net/apps/searxng/icons/icon.svg", + "sources": [ + "https://hub.docker.com/r/searxng/searxng", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/searxng", + "https://github.com/searxng/searxng" + ], + "keywords": [ + "search" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "searxng", + "groupName": "searxng", + "gid": 0, + "uid": 0, + "description": "SearXNG requires root privileges to start it's sub-processes." + } + ], + "capabilities": [ + { + "name": "SETUID", + "description": "SearXNG requires this ability to switch user for sub-processes." + }, + { + "name": "SETGID", + "description": "SearXNG requires this ability to switch group for sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "SearXNG Configuration", + "description": "Configure SearXNG" + }, + { + "name": "Network Configuration", + "description": "Configure Network for SearXNG" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for SearXNG" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for SearXNG" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "searxngConfig", + "label": "", + "group": "SearXNG Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the SearXNG instance.", + "schema": { + "type": "string", + "default": "SearXNG", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for SearXNG.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "searxngNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the SearXNG Web UI.", + "schema": { + "type": "int", + "default": 30053, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "searxngStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "SearXNG Config Storage", + "description": "The path to store SearXNG Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for SearXNG.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for SearXNG.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for SearXNG.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

SearXNG

\n

SearXNG is a privacy-respecting, hackable metasearch engine

", + "detailed_readme": "

SearXNG

\n

SearXNG is a privacy-respecting, hackable metasearch engine

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/sftpgo/app_versions.json b/community/sftpgo/app_versions.json new file mode 100644 index 0000000000..0570641257 --- /dev/null +++ b/community/sftpgo/app_versions.json @@ -0,0 +1,878 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/sftpgo/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "v2.5.4_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "sftpgo", + "description": "SFTPGo is a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob", + "annotations": { + "title": "SFTPGo" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "v2.5.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/drakkan/sftpgo", + "icon": "https://media.sys.truenas.net/apps/sftpgo/icons/icon.png", + "sources": [ + "https://hub.docker.com/r/drakkan/sftpgo", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/sftpgo", + "https://github.com/drakkan/sftpgo" + ], + "keywords": [ + "sftpgo" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "sftpgo", + "groupName": "sftpgo", + "gid": 568, + "uid": 568, + "description": "SFTPGo can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "SFTPGo Configuration", + "description": "Configure SFTPGo" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for SFTPGo" + }, + { + "name": "Network Configuration", + "description": "Configure Network for SFTPGo" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for SFTPGo" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for SFTPGo" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "sftpgoConfig", + "label": "", + "group": "SFTPGo Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "imageSelector", + "label": "Image Selector", + "description": "The image to use for SFTPGo.", + "schema": { + "type": "string", + "default": "image", + "required": true, + "enum": [ + { + "value": "image", + "description": "Default Image" + }, + { + "value": "pluginsImage", + "description": "Plugins Image" + } + ] + } + }, + { + "variable": "graceTime", + "label": "Grace Time", + "description": "The time in seconds to wait for connections to close before shutting down.", + "schema": { + "type": "int", + "default": 60, + "min": 1, + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for SFTPGo.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "sftpgoRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that SFTPGo will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that SFTPGo will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "sftpgoNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for SFTPGo WebUI", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the SFTPGo Web UI.", + "schema": { + "type": "int", + "default": 30086, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "webdavdServices", + "label": "WebDAVd Services", + "description": "Enable one or more WebDAVd services.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "webdavdServiceEntry", + "label": "WebDAVd Service Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable this WebDAVd service.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "port", + "label": "Port", + "description": "The port for WebDAVd.", + "schema": { + "type": "int", + "default": 30089, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "sftpdServices", + "label": "SFTPd Services", + "description": "Enable one or more SFTPd services.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "sftpdServiceEntry", + "label": "SFTPd Service Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable this SFTPd service.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "port", + "label": "Port", + "description": "The port for SFTPd.", + "schema": { + "type": "int", + "default": 30087, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "ftpdServices", + "label": "FTPd Services", + "description": "Enable one or more FTPd services.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ftpdServiceEntry", + "label": "FTPd Service Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "description": "Enable this FTPd service.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "port", + "label": "Port", + "description": "The port for FTPd.", + "schema": { + "type": "int", + "default": 30088, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "ftpdPassivePortRange", + "label": "FTPd Passive Port Range", + "description": "The port range for FTPd passive connections.", + "schema": { + "type": "dict", + "show_if": [ + [ + "ftpdServices", + "!=", + [] + ] + ], + "attrs": [ + { + "variable": "start", + "label": "Start", + "description": "The start of the port range.", + "schema": { + "type": "int", + "default": 50000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "end", + "label": "End", + "description": "The end of the port range.", + "schema": { + "type": "int", + "default": 50001, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "sftpgoStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "SFTPGo Config Storage", + "description": "The path to store SFTPGo Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "data", + "label": "SFTPGo Data Storage", + "description": "The path to store SFTPGo Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "backups", + "label": "SFTPGo Backups Storage", + "description": "The path to store SFTPGo Backups.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "backups", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for SFTPGo.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for SFTPGo.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for SFTPGo.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

SFTPGo

\n

SFTPGo is a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the SFTPGo directories.\nAfterward, the SFTPGo container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

SFTPGo

\n

SFTPGo is a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the SFTPGo directories.\nAfterward, the SFTPGo container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/sonarr/app_versions.json b/community/sonarr/app_versions.json new file mode 100644 index 0000000000..8910e1d32a --- /dev/null +++ b/community/sonarr/app_versions.json @@ -0,0 +1,538 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/sonarr/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "3.0.10.1567_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "sonarr", + "description": "Sonarr is a PVR for Usenet and BitTorrent users.", + "annotations": { + "title": "Sonarr" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "3.0.10.1567", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/Sonarr/Sonarr", + "icon": "https://media.sys.truenas.net/apps/sonarr/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/sonarr", + "https://github.com/truenas/charts/tree/master/community/sonarr", + "https://github.com/Sonarr/Sonarr" + ], + "keywords": [ + "media", + "series" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "sonarr", + "groupName": "sonarr", + "gid": 568, + "uid": 568, + "description": "Sonarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Sonarr Configuration", + "description": "Configure Sonarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Sonarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Sonarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Sonarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Sonarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "sonarrConfig", + "label": "", + "group": "Sonarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the Sonarr instance.", + "schema": { + "type": "string", + "default": "Sonarr", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Sonarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "sonarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Sonarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Sonarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "sonarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Sonarr Web UI.", + "schema": { + "type": "int", + "default": 30027, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "sonarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Sonarr Config Storage", + "description": "The path to store Sonarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Sonarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Sonarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Sonarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Sonarr

\n

Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Sonarr directories.\nAfterward, the Sonarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Sonarr

\n

Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Sonarr directories.\nAfterward, the Sonarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/tailscale/app_versions.json b/community/tailscale/app_versions.json new file mode 100644 index 0000000000..88e2c1675d --- /dev/null +++ b/community/tailscale/app_versions.json @@ -0,0 +1,312 @@ +{ + "1.0.21": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/tailscale/1.0.21", + "last_update": "2023-11-01 00:33:50", + "required_features": [], + "human_version": "1.52.0_1.0.21", + "version": "1.0.21", + "chart_metadata": { + "name": "tailscale", + "description": "Secure remote access to shared resources", + "annotations": { + "title": "Tailscale" + }, + "type": "application", + "version": "1.0.21", + "apiVersion": "v2", + "appVersion": "1.52.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://tailscale.com/", + "icon": "https://media.sys.truenas.net/apps/tailscale/icons/icon.png", + "sources": [ + "https://tailscale.com/", + "https://github.com/truenas/charts/tree/master/community/tailscale", + "https://hub.docker.com/r/tailscale/tailscale" + ], + "keywords": [ + "vpn", + "tailscale" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Tailscale requires root privileges to start the tailscaled process (Only when userspace is disabled)" + } + ], + "capabilities": [ + { + "name": "NET_ADMIN", + "description": "Tailscale requires NET_ADMIN to configure the VPN interface, modify routes, etc." + }, + { + "name": "NET_RAW", + "description": "Tailscale requires NET_RAW to use raw sockets and proxying" + } + ], + "hostMounts": [ + { + "hostPath": "/dev/tun", + "description": "Required to access the TUN device (Only when userspace is disabled)" + } + ] + }, + "schema": { + "groups": [ + { + "name": "Tailscale Configuration", + "description": "Configure Tailscale" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Tailscale" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Tailscale" + } + ], + "questions": [ + { + "variable": "tailscaleConfig", + "label": "", + "group": "Tailscale Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "authkey", + "label": "Auth Key", + "description": "The auth key for Tailscale.
\nSame as `--authkey` flag.\n", + "schema": { + "type": "string", + "default": "", + "required": true, + "private": true + } + }, + { + "variable": "hostname", + "label": "Hostname", + "description": "The hostname for Tailscale Node.
\nOnly lowercase letters, numbers, and hyphens are allowed.
\nSame as `--hostname` flag.\n", + "schema": { + "type": "string", + "default": "truenas-scale", + "required": true + } + }, + { + "variable": "advertiseRoutes", + "label": "Advertise Routes", + "description": "The routes to advertise.
\nSame as `--advertise-routes` flag.\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "routeEntry", + "label": "Route", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "advertiseExitNode", + "label": "Advertise Exit Node", + "description": "Advertise as Exit Node.
\nSame as `--advertise-exit-node` flag.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "userspace", + "label": "Userspace", + "description": "Userspace for Tailscale.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "acceptDns", + "label": "Accept DNS", + "description": "Accept DNS.
\nSame as `--accept-dns` flag.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "extraArgs", + "label": "Extra Arguments", + "description": "Extra arguments for Tailscale.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "argEntry", + "label": "Argument", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "extraDaemonArgs", + "label": "Extra Daemon Arguments", + "description": "Extra arguments for Tailscale daemon.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "DaemonArgEntry", + "label": "Daemon Argument", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Tailscale.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tailscaleNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Tailscale.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Tailscale.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Tailscale

\n

Tailscale Secure remote access to shared resources

\n", + "detailed_readme": "

Tailscale

\n

Tailscale Secure remote access to shared resources

\n", + "changelog": null + } +} \ No newline at end of file diff --git a/community/tautulli/app_versions.json b/community/tautulli/app_versions.json new file mode 100644 index 0000000000..93a57e1f67 --- /dev/null +++ b/community/tautulli/app_versions.json @@ -0,0 +1,529 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/tautulli/1.1.2", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "2.13.2_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "tautulli", + "description": "Tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.", + "annotations": { + "title": "Tautulli" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "2.13.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://tautulli.com/", + "icon": "https://media.sys.truenas.net/apps/tautulli/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/tautulli", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/tautulli", + "https://github.com/Tautulli/Tautulli" + ], + "keywords": [ + "media", + "analytics", + "notifications" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "tautulli", + "groupName": "tautulli", + "gid": 568, + "uid": 568, + "description": "Tautulli can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Tautulli Configuration", + "description": "Configure Tautulli" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Tautulli" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Tautulli" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Tautulli" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Tautulli" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "tautulliConfig", + "label": "", + "group": "Tautulli Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Tautulli.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tautulliRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Tautulli will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Tautulli will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "tautulliNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Tautulli Web UI.", + "schema": { + "type": "int", + "default": 30047, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "tautulliStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Tautulli Config Storage", + "description": "The path to store Tautulli Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Tautulli.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Tautulli.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Tautulli.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Tautulli

\n

Tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Tautulli directories.\nAfterward, the Tautulli container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Tautulli

\n

Tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Tautulli directories.\nAfterward, the Tautulli container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/tdarr/app_versions.json b/community/tdarr/app_versions.json new file mode 100644 index 0000000000..2ad19ea68d --- /dev/null +++ b/community/tdarr/app_versions.json @@ -0,0 +1,862 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/tdarr/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone", + "definitions/gpuConfiguration" + ], + "human_version": "2.00.20.1_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "tdarr", + "description": "Tdarr is a Distributed Transcoding System", + "annotations": { + "title": "Tdarr" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "2.00.20.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://home.tdarr.io/", + "icon": "https://media.sys.truenas.net/apps/tdarr/icons/icon.png", + "sources": [ + "https://home.tdarr.io/", + "https://github.com/truenas/charts/tree/master/community/tdarr", + "https://docs.tdarr.io/docs" + ], + "keywords": [ + "media", + "encode", + "transcode" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Tdarr requires to run as root to start the Tdarr server (and optionally node)." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Tdarr requires this ability to chown files." + }, + { + "name": "FOWNER", + "description": "Tdarr requires this ability to bypass file ownership checks for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Tdarr requires this ability to switch group for sub-processes." + }, + { + "name": "SETUID", + "description": "Tdarr requires this ability to switch user for sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Tdarr Configuration", + "description": "Configure Tdarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Tdarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Tdarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Tdarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Tdarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Tdarr Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "tdarrConfig", + "label": "", + "group": "Tdarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "internalNode", + "label": "Internal Node", + "description": "If disabled, Tdarr will run only the server and webUI.
\nIf enabled, Tdarr will also start an internal node in the same container.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "nodeName", + "label": "Node Name", + "description": "The name of the Tdarr Node.", + "schema": { + "type": "string", + "default": "Tdarr", + "show_if": [ + [ + "internalNode", + "=", + true + ] + ], + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Tdarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tdarrID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Tdarr files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Tdarr files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "tdarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Tdarr Web UI.", + "schema": { + "type": "int", + "default": 30028, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "serverPort", + "label": "Server Port", + "description": "The port for the Tdarr Server.", + "schema": { + "type": "int", + "default": 30029, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "tdarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "server", + "label": "Tdarr Server Storage", + "description": "The path to store Tdarr Server Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "server", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "configs", + "label": "Tdarr Config Storage", + "description": "The path to store Tdarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "configs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "logs", + "label": "Tdarr Logs Storage", + "description": "The path to store Tdarr Logs.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "logs", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "transcodes", + "label": "Tdarr Transcodes Storage", + "description": "The path to store Tdarr Transcodes.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nemptyDir: Is a temporary directory that will be created on the disk or in memory.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "emptyDir", + "description": "emptyDir (Temporary directory created on the disk or in memory)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "transcodes", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + }, + { + "variable": "medium", + "label": "emptyDir Medium", + "description": "Disk: Creates a temporary directory on the disk.
\nMemory: Creates a temporary directory in memory.\n", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "default": "", + "enum": [ + { + "value": "", + "description": "Disk (Temporary directory created on the disk)" + }, + { + "value": "Memory", + "description": "Memory (Temporary directory created in memory)" + } + ] + } + }, + { + "variable": "size", + "label": "emptyDir Size Limit", + "description": "The maximum size of the temporary directory.
\nFor example: 2Gi\n", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "default": "2Gi" + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Tdarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Tdarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Tdarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "tdarrGPU", + "group": "Resources Configuration", + "label": "GPU Configuration", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + } + ] + }, + "app_readme": "

Tdarr

\n

Tdarr is a Distributed Transcoding System

\n", + "detailed_readme": "

Tdarr

\n

Tdarr is a Distributed Transcoding System

\n", + "changelog": null + } +} \ No newline at end of file diff --git a/community/terraria/app_versions.json b/community/terraria/app_versions.json new file mode 100644 index 0000000000..bf1aa5a9e4 --- /dev/null +++ b/community/terraria/app_versions.json @@ -0,0 +1,553 @@ +{ + "1.0.12": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/terraria/1.0.12", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "1.4.4.9_1.0.12", + "version": "1.0.12", + "chart_metadata": { + "name": "terraria", + "description": "Terraria is a land of adventure! A land of mystery! A land that's yours to shape, defend, and enjoy.", + "annotations": { + "title": "Terraria" + }, + "type": "application", + "version": "1.0.12", + "apiVersion": "v2", + "appVersion": "1.4.4.9", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://terraria.org/", + "icon": "https://media.sys.truenas.net/apps/terraria/icons/icon.png", + "sources": [ + "https://terraria.org/", + "https://github.com/truenas/charts/tree/master/community/terraria", + "https://github.com/ryansheehan/terraria" + ], + "keywords": [ + "game", + "terraria" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Terraria runs as root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Terraria Configuration", + "description": "Configure Terraria" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Terraria" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Terraria" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Terraria" + } + ], + "questions": [ + { + "variable": "terrariaConfig", + "label": "", + "group": "Terraria Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "imageSelector", + "label": "Image Selector", + "description": "Selects the image to use for the Terraria server.
\nTShock is a fork of the Terraria server that adds a number of features.
\nVanilla is the original Terraria server.
\nOnly applies to newly generated worlds.\n", + "schema": { + "type": "string", + "default": "image", + "required": true, + "immutable": true, + "enum": [ + { + "value": "image", + "description": "TShock" + }, + { + "value": "vanillaImage", + "description": "Vanilla" + } + ] + } + }, + { + "variable": "worldName", + "label": "World Name", + "description": "Sets the world's name.
\nOnly applies to newly generated worlds.\n", + "schema": { + "type": "string", + "default": "My-World", + "required": true, + "immutable": true + } + }, + { + "variable": "worldSeed", + "label": "World Seed", + "description": "Sets the world's seed.
\nOnly applies to newly generated worlds.\n", + "schema": { + "type": "string", + "default": "", + "immutable": true + } + }, + { + "variable": "worldEvil", + "label": "World's Evil", + "description": "Sets the world's evil state.
\nOnly applies to newly generated worlds.\n", + "schema": { + "type": "string", + "default": "random", + "required": true, + "immutable": true, + "enum": [ + { + "value": "random", + "description": "Random" + }, + { + "value": "corrupt", + "description": "Corrupt" + }, + { + "value": "crimson", + "description": "Crimson" + } + ] + } + }, + { + "variable": "worldSize", + "label": "World Size", + "description": "Sets the world's size.
\nOnly applies to newly generated worlds.\n", + "schema": { + "type": "string", + "default": "small", + "required": true, + "immutable": true, + "enum": [ + { + "value": "small", + "description": "Small (1)" + }, + { + "value": "medium", + "description": "Medium (2)" + }, + { + "value": "large", + "description": "Large (3)" + } + ] + } + }, + { + "variable": "worldDifficulty", + "label": "World Difficulty", + "description": "Sets the world's difficulty.
\nOnly applies to newly generated worlds.\n", + "schema": { + "type": "string", + "default": "normal", + "required": true, + "immutable": true, + "enum": [ + { + "value": "normal", + "description": "Normal (0)" + }, + { + "value": "expert", + "description": "Expert (1)" + }, + { + "value": "master", + "description": "Master (2)" + }, + { + "value": "journey", + "description": "Journey (3)" + } + ] + } + }, + { + "variable": "maxPlayers", + "label": "Maximum Players", + "description": "Starts the server with the given player count as the maximum.", + "schema": { + "type": "int", + "default": 8, + "min": 1, + "max": 255, + "required": true + } + }, + { + "variable": "password", + "label": "Server Password", + "description": "Sets the server password.", + "schema": { + "type": "string", + "private": true, + "default": "" + } + }, + { + "variable": "secure", + "label": "Secure Server", + "description": "Turns on the base game's \"anti-spam\" feature.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "forceUpdate", + "label": "Force Update", + "description": "Forces the server to continue running, and not hibernating when no players are on.
\nThis results in time passing, grass growing, and cpu running.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Terraria.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "additionalArgs", + "label": "Additional Arguments", + "description": "Configure additional arguments for Terraria.
\nValue is optional for flags like -heaptile
\nFor example:
\nKey: -lang
\nValue: en-US\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Argument", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "terrariaNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "serverPort", + "label": "Server Port", + "description": "The port for the Terraria Server.", + "schema": { + "type": "int", + "default": 30030, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "terrariaStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "world", + "label": "Terraria World Storage", + "description": "The path to store Terraria World.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "world", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "plugins", + "label": "Terraria Plugins Storage", + "description": "The path to store Terraria Plugins.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "plugins", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Terraria.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Terraria.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Terraria

\n

Terraria is a land of adventure! A land of mystery! A land that's yours to shape, defend, and enjoy.

\n

This applies only for the TShock image.\nOn the first run, you have to check the logs to get the server token. You will find something like this:

\n

text\nLogin before join enabled. Users may be prompted for an account specific password instead of a server password on connect.\nLogin using UUID enabled. Users automatically login via UUID.\nA malicious server can easily steal a user's UUID. You may consider turning this option off if you run a public server.\nTShock Notice: setup-code.txt is still present, and the code located in that file will be used.\nTo setup the server, join the game and type /setup 424041\nThis token will display until disabled by verification. (/setup)

\n

Join the server and run /setup <token>

", + "detailed_readme": "

Terraria

\n

Terraria is a land of adventure! A land of mystery! A land that's yours to shape, defend, and enjoy.

\n

This applies only for the TShock image.\nOn the first run, you have to check the logs to get the server token. You will find something like this:

\n

text\nLogin before join enabled. Users may be prompted for an account specific password instead of a server password on connect.\nLogin using UUID enabled. Users automatically login via UUID.\nA malicious server can easily steal a user's UUID. You may consider turning this option off if you run a public server.\nTShock Notice: setup-code.txt is still present, and the code located in that file will be used.\nTo setup the server, join the game and type /setup 424041\nThis token will display until disabled by verification. (/setup)

\n

Join the server and run /setup <token>

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/tftpd-hpa/app_versions.json b/community/tftpd-hpa/app_versions.json new file mode 100644 index 0000000000..7cd3a3614a --- /dev/null +++ b/community/tftpd-hpa/app_versions.json @@ -0,0 +1,346 @@ +{ + "1.0.9": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/tftpd-hpa/1.0.9", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "1.0.0_1.0.9", + "version": "1.0.9", + "chart_metadata": { + "name": "tftpd-hpa", + "description": "A lightweight tftp-server", + "annotations": { + "title": "TFTP Server" + }, + "type": "application", + "version": "1.0.9", + "apiVersion": "v2", + "appVersion": "1.0.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa", + "icon": "https://media.sys.truenas.net/apps/tftpd-hpa/icons/icon.png", + "sources": [ + "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa", + "https://github.com/truenas/charts/tree/master/community/tftpd-hpa", + "https://hub.docker.com/r/ixsystems/tftpd-hpa" + ], + "keywords": [ + "tftp", + "netboot" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "TFTP requires root privileges to start it's processes." + } + ], + "capabilities": [ + { + "name": "NET_BIND_SERVICE", + "description": "TFTP requires this ability to bind to port 69 for TFTP." + }, + { + "name": "SETUID", + "description": "TFTP requires this ability to switch user for sub-processes." + }, + { + "name": "SETGID", + "description": "TFTP requires this ability to switch group for sub-processes." + }, + { + "name": "SYS_CHROOT", + "description": "TFTP requires this ability to use chroot for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "TFTP Configuration", + "description": "Configure TFTP" + }, + { + "name": "Network Configuration", + "description": "Configure Network for TFTP" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for TFTP" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for TFTP" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "TFTP Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "tftpConfig", + "label": "", + "group": "TFTP Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "allowCreate", + "label": "Allow Create", + "description": "Allow new files to be created. This is disabled by default.
\nEnabling this will change the permissions of the tftpboot directory to 757.\nDisabling this will change the permissions of the tftpboot directory to 555.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for TFTP.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tftpNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "tftpPort", + "label": "TFTP Port", + "description": "The port for TFTP.\nWhen hostNetwork is enabled, the port tftp port will be 69.\n", + "schema": { + "type": "int", + "default": 30031, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "tftpStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "tftpboot", + "label": "TFTP Boot Storage", + "description": "The path to store TFTP Boot files.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "tftpboot", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for TFTP.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for TFTP.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

TFTP

\n

TFTP is a server for the Trivial File Transfer Protocol.

\n

The app runs as root user and drops privileges to tftp (9069) user for the TFTP service.

\n
\n

On every application start, a container will be launched with root privileges.\nThis will check the parent directory permissions and ownership.\nIf there is a mismatch it will apply the correct permissions to the TFTP directories.\nWhen \"Allow Create\" is checked, the above container will also check and chmod if needed\nto 757 the TFTP directories and to 555 when not checked.\nAfterward, the TFTP container will run as a root user, dropping privileges\nto tftp (9069) user for the TFTP service.\nNote: You need to have configured DHCP server for network boot to work.

\n
", + "detailed_readme": "

TFTP

\n

TFTP is a server for the Trivial File Transfer Protocol.

\n

The app runs as root user and drops privileges to tftp (9069) user for the TFTP service.

\n
\n

On every application start, a container will be launched with root privileges.\nThis will check the parent directory permissions and ownership.\nIf there is a mismatch it will apply the correct permissions to the TFTP directories.\nWhen \"Allow Create\" is checked, the above container will also check and chmod if needed\nto 757 the TFTP directories and to 555 when not checked.\nAfterward, the TFTP container will run as a root user, dropping privileges\nto tftp (9069) user for the TFTP service.\nNote: You need to have configured DHCP server for network boot to work.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/tiny-media-manager/app_versions.json b/community/tiny-media-manager/app_versions.json new file mode 100644 index 0000000000..db88c99b4b --- /dev/null +++ b/community/tiny-media-manager/app_versions.json @@ -0,0 +1,542 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/tiny-media-manager/1.1.2", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "4.3.14_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "tiny-media-manager", + "description": "tinyMediaManager is a media management tool written in Java/Swing.", + "annotations": { + "title": "tinyMediaManager" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "4.3.14", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://www.tinymediamanager.org/", + "icon": "https://media.sys.truenas.net/apps/tiny-media-manager/icons/icon.png", + "sources": [ + "https://www.tinymediamanager.org/", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/tiny-media-manager", + "https://hub.docker.com/r/tinymediamanager/tinymediamanager" + ], + "keywords": [ + "media", + "tv-shows", + "movies" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "tinyMediaManager runs as root user" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "tinyMediaManager is able to chown files." + }, + { + "name": "SETGID", + "description": "tinyMediaManager is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "tinyMediaManager is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "tinyMediaManager Configuration", + "description": "Configure tinyMediaManager" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for tinyMediaManager" + }, + { + "name": "Network Configuration", + "description": "Configure Network for tinyMediaManager" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for tinyMediaManager" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for tinyMediaManager" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "tmmConfig", + "label": "", + "group": "tinyMediaManager Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "password", + "label": "Password (Optional)", + "description": "The password for tinyMediaManager.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for tinyMediaManager.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tmmID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that tinyMediaManager files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that tinyMediaManager files will be owned by.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "tmmNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the tinyMediaManager Web UI.", + "schema": { + "type": "int", + "default": 30057, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "tmmStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "tinyMediaManager Data Storage", + "description": "The path to store tinyMediaManager Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for tinyMediaManager.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for tinyMediaManager.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for tinyMediaManager.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

tinyMediaManager

\n

tinyMediaManager is a media management tool written in Java/Swing.

", + "detailed_readme": "

tinyMediaManager

\n

tinyMediaManager is a media management tool written in Java/Swing.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/transmission/app_versions.json b/community/transmission/app_versions.json new file mode 100644 index 0000000000..0e652ad5ad --- /dev/null +++ b/community/transmission/app_versions.json @@ -0,0 +1,723 @@ +{ + "1.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/transmission/1.2.0", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "4.0.4_1.2.0", + "version": "1.2.0", + "chart_metadata": { + "name": "transmission", + "description": "Transmission is designed for easy, powerful use.", + "annotations": { + "title": "Transmission" + }, + "type": "application", + "version": "1.2.0", + "apiVersion": "v2", + "appVersion": "4.0.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://transmissionbt.com/", + "icon": "https://media.sys.truenas.net/apps/transmission/icons/icon.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/transmission", + "https://github.com/truenas/charts/tree/master/community/transmission", + "https://transmissionbt.com/" + ], + "keywords": [ + "media", + "torrent", + "download" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "transmission", + "groupName": "transmission", + "gid": 568, + "uid": 568, + "description": "Transmission can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Transmission Configuration", + "description": "Configure Transmission" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Transmission" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Transmission" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Transmission" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Transmission" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "transmissionConfig", + "label": "", + "group": "Transmission Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Transmission.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "transmissionRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Transmission will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Transmission will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "transmissionNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Transmission Web UI.", + "schema": { + "type": "int", + "default": 30096, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "peerPort", + "label": "Peer Port", + "description": "The port for the Transmission Torrent protocol. Both TCP and UDP", + "schema": { + "type": "int", + "default": 50413, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "transmissionStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Transmission Config Storage", + "description": "The path to store Transmission Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "downloadsComplete", + "label": "Transmission Complete Downloads Storage", + "description": "The path to store Transmission Complete Downloads.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "downloads-complete", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "downloadsDir", + "label": "Downloads Directory (In-Container)", + "description": "The directory inside the container to store downloads.", + "schema": { + "type": "path", + "default": "/downloads/complete", + "required": true, + "immutable": true + } + }, + { + "variable": "enableIncompleteDir", + "label": "Enable Incomplete Directory", + "description": "Enable incomplete directory.", + "schema": { + "type": "boolean", + "default": true, + "immutable": true + } + }, + { + "variable": "downloadsIncomplete", + "label": "Transmission Incomplete Downloads Storage", + "description": "The path to store Transmission Incomplete Downloads.", + "schema": { + "type": "dict", + "show_if": [ + [ + "enableIncompleteDir", + "=", + true + ] + ], + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "downloads-incomplete", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "incompleteDir", + "label": "Incomplete Directory (In-Container)", + "description": "The directory inside the container to store incomplete downloads.", + "schema": { + "type": "path", + "default": "/downloads/incomplete", + "show_if": [ + [ + "enableIncompleteDir", + "=", + true + ] + ], + "required": true, + "immutable": true + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Transmission additional storage", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "Resources Configuration", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Transmission.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Transmission.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Transmission

\n

Transmission is designed for easy, powerful use.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Transmission directories.\nAfterward, the Transmission container will run as a non-root user (Default: 568).

\n
\n

For additional configuration via environment variables, see Container's source env var list.

", + "detailed_readme": "

Transmission

\n

Transmission is designed for easy, powerful use.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Transmission directories.\nAfterward, the Transmission container will run as a non-root user (Default: 568).

\n
\n

For additional configuration via environment variables, see Container's source env var list.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/twofactor-auth/app_versions.json b/community/twofactor-auth/app_versions.json new file mode 100644 index 0000000000..2b7dece463 --- /dev/null +++ b/community/twofactor-auth/app_versions.json @@ -0,0 +1,620 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/twofactor-auth/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "4.2.3_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "twofactor-auth", + "description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop.", + "annotations": { + "title": "2FAuth" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "4.2.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://docs.2fauth.app/", + "icon": "https://media.sys.truenas.net/apps/twofactor-auth/icons/icon.png", + "sources": [ + "https://github.com/Bubka/2FAuth", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/2fauth", + "https://hub.docker.com/r/2fauth/2fauth/" + ], + "keywords": [ + "security", + "2fa", + "otp" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "twofauth", + "groupName": "twofauthreadarr", + "gid": 1000, + "uid": 1000, + "description": "2FAuth runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "2FAuth Configuration", + "description": "Configure 2FAuth" + }, + { + "name": "Network Configuration", + "description": "Configure Network for 2FAuth" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for 2FAuth" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for 2FAuth" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "twofauthConfig", + "label": "", + "group": "2FAuth Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "appName", + "label": "App Name", + "description": "The name of the 2FAuth.", + "schema": { + "type": "string", + "default": "2FAuth", + "required": true + } + }, + { + "variable": "appUrl", + "label": "App URL", + "description": "The URL that 2FAuth will be accessible from.
\nExample:
\nhttp://server.ip:30081
\nhttps://2fauth.example.com\n", + "schema": { + "type": "uri", + "default": "", + "required": true + } + }, + { + "variable": "siteOwnerEmail", + "label": "Site Owner Email", + "description": "The email address of the site owner.", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "authenticationGuard", + "label": "Authentication Guard", + "description": "When using 'reverse-proxy-guard' 2FAuth only look for the dedicated headers and skip all\nother built-in authentication checks. That means your proxy is fully responsible of the\nauthentication process, 2FAuth will trust him as long as headers are presents.\n", + "schema": { + "type": "string", + "default": "web-guard", + "required": true, + "enum": [ + { + "value": "web-guard", + "description": "Web Guard" + }, + { + "value": "reverse-proxy-guard", + "description": "Reverse Proxy Guard" + } + ] + } + }, + { + "variable": "authProxyHeaderUser", + "label": "Authentication Proxy Header User", + "description": "Name of the HTTP headers sent by the reverse proxy that identifies the authenticated\nuser at proxy level. Check your proxy documentation to find out how these headers are named.\n", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "authenticationGuard", + "=", + "reverse-proxy-guard" + ] + ], + "required": true + } + }, + { + "variable": "authProxyHeaderEmail", + "label": "Authentication Proxy Header Email", + "description": "Name of the HTTP headers sent by the reverse proxy that identifies the authenticated\nuser at proxy level. Check your proxy documentation to find out how these headers are named.\n", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "authenticationGuard", + "=", + "reverse-proxy-guard" + ] + ], + "required": true + } + }, + { + "variable": "webauthnUserVerification", + "label": "WebAuthn User Verification", + "description": "Most authenticators and smartphones will ask the user to actively verify\nthemselves for log in. For example, through a touch plus pin code,\npassword entry, or biometric recognition (e.g., presenting a fingerprint).\nThe intent is to distinguish one user from any other.\n", + "schema": { + "type": "string", + "default": "preferred", + "required": true, + "enum": [ + { + "value": "preferred", + "description": "Preferred" + }, + { + "value": "required", + "description": "Required" + }, + { + "value": "discouraged", + "description": "Discouraged" + } + ] + } + }, + { + "variable": "trustedProxies", + "label": "Trusted Proxies", + "description": "The list of proxies IP to trust", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "trustedProxy", + "label": "Trusted Proxy", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for 2FAuth.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "twofauthNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the 2FAuth Web UI.", + "schema": { + "type": "int", + "default": 30081, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "twofauthStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "2FAuth Config Storage", + "description": "The path to store 2FAuth Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for 2FAuth.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for 2FAuth.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for 2FAuth.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

2FAuth

\n

2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the 2FAuth directories.\nAfterward, the 2FAuth container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

2FAuth

\n

2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the 2FAuth directories.\nAfterward, the 2FAuth container will run as a non-root user (1000).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/unifi-controller/app_versions.json b/community/unifi-controller/app_versions.json new file mode 100644 index 0000000000..bd0a2c3cce --- /dev/null +++ b/community/unifi-controller/app_versions.json @@ -0,0 +1,605 @@ +{ + "1.1.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/unifi-controller/1.1.1", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/timezone" + ], + "human_version": "7.5.176_1.1.1", + "version": "1.1.1", + "chart_metadata": { + "name": "unifi-controller", + "description": "Unifi Controller is a network management controller for Unifi Equipment.", + "annotations": { + "title": "Unifi Controller" + }, + "type": "application", + "version": "1.1.1", + "apiVersion": "v2", + "appVersion": "7.5.176", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/jacobalberty/unifi-docker", + "icon": "https://media.sys.truenas.net/apps/unifi-controller/icons/icon.png", + "sources": [ + "https://github.com/jacobalberty/unifi-docker", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/unifi-controller", + "https://hub.docker.com/r/jacobalberty/unifi" + ], + "keywords": [ + "network", + "controller", + "unifi" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "unifi", + "groupName": "unifi", + "gid": 999, + "uid": 999, + "description": "Unifi runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Unifi Controller Configuration", + "description": "Configure Unifi Controller" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Unifi Controller" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Unifi Controller" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Unifi Controller" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Unifi Controller Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "unifiConfig", + "label": "", + "group": "Unifi Controller Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Unifi Controller.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "unifiNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webHttpsPort", + "label": "Web HTTPS Port", + "description": "The HTTPS port for the Unifi Controller Web UI.", + "schema": { + "type": "int", + "default": 30072, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enableWebHttp", + "label": "Enable Web HTTP", + "description": "Enable HTTP for the Unifi Controller Web UI.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webHttpPort", + "label": "Web HTTP Port", + "description": "The HTTP port for the Unifi Controller Web UI.", + "schema": { + "type": "int", + "default": 30073, + "show_if": [ + [ + "enableWebHttp", + "=", + true + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "portalHttpsPort", + "label": "Portal HTTPS Port", + "description": "The HTTPS port for the Unifi Controller Portal.", + "schema": { + "type": "int", + "default": 30074, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "enablePortalHttp", + "label": "Enable Portal HTTP", + "description": "Enable HTTP for the Unifi Controller Portal.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "portalHttpPort", + "label": "Portal HTTP Port", + "description": "The HTTP port for the Unifi Controller Portal.", + "schema": { + "type": "int", + "default": 30075, + "show_if": [ + [ + "enablePortalHttp", + "=", + true + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Unifi Controller", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network.
\nThis might be required for specific features like STUN.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "unifiStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Unifi Controller Data Storage", + "description": "The path to store Unifi Controller Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Unifi Controller.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Unifi Controller.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Unifi Controller.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Unifi Controller

\n

Unifi Controller is a network management controller for Unifi Equipment.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Unifi Controller directories.\nAfterward, the Unifi Controller container will run as a non-root user (999).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Unifi Controller

\n

Unifi Controller is a network management controller for Unifi Equipment.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Unifi Controller directories.\nAfterward, the Unifi Controller container will run as a non-root user (999).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/unifi-protect-backup/app_versions.json b/community/unifi-protect-backup/app_versions.json new file mode 100644 index 0000000000..2a62bd1dcc --- /dev/null +++ b/community/unifi-protect-backup/app_versions.json @@ -0,0 +1,754 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/unifi-protect-backup/1.1.2", + "last_update": "2023-11-02 11:28:44", + "required_features": [ + "normalize/ixVolume", + "definitions/timezone" + ], + "human_version": "0.10.1_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "unifi-protect-backup", + "description": "Unifi Protect Backup is a python based tool for backing up UniFi Protect event clips as they occur.", + "annotations": { + "title": "Unifi Protect Backup" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "0.10.1", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://github.com/ep1cman/unifi-protect-backup", + "icon": "https://media.sys.truenas.net/apps/unifi-protect-backup/icons/icon.png", + "sources": [ + "https://github.com/ep1cman/unifi-protect-backup", + "https://github.com/truenas/charts/tree/master/community/unifi-protect-backup", + "https://github.com/ep1cman/unifi-protect-backup/pkgs/container/unifi-protect-backup/" + ], + "keywords": [ + "backup", + "unifi-protect" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Unifi Protect Backup run as root user" + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Unifi Protect Backup is able to chown files." + }, + { + "name": "FOWNER", + "description": "Unifi Protect Backup is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Unifi Protect Backup is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Unifi Protect Backup is able to set user ID for it's sub-processes." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Unifi Protect Backup Configuration", + "description": "Configure Unifi Protect Backup" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Unifi Protect Backup" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Unifi Protect Backup" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Unifi Protect Backup" + } + ], + "questions": [ + { + "variable": "TZ", + "group": "Unifi Protect Backup Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "upbConfig", + "label": "", + "group": "Unifi Protect Backup Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "unifiProtectUsername", + "label": "Unifi Protect Username", + "description": "Username to login to Unifi Protect instance", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "unifiProtectPassword", + "label": "Unifi Protect Password", + "description": "Password for Unifi Protect user", + "schema": { + "type": "string", + "required": true, + "private": true + } + }, + { + "variable": "unifiProtectAddress", + "label": "Unifi Protect Address", + "description": "Address of Unifi Protect instance", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "unifiProtectPort", + "label": "Unifi Protect Port", + "description": "Port of Unifi Protect instance", + "schema": { + "type": "int", + "min": 1, + "max": 65535, + "required": true, + "default": 443 + } + }, + { + "variable": "unifiProtectVerifySsl", + "label": "Unifi Protect Verify SSL", + "description": "Verify SSL certificate of Unifi Protect instance", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "skipMissing", + "label": "Skip Missing", + "description": "If set, events which are 'missing' at the start will be ignored.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "ignoreCameras", + "label": "Ignore Cameras", + "description": "IDs of cameras for which events should not be backed up. One per line.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "id", + "label": "Camera ID", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "detectionTypes", + "label": "Detection Types", + "description": "Types of detections to back up. One per line.", + "schema": { + "type": "list", + "default": [ + "motion", + "person", + "vehicle", + "ring" + ], + "items": [ + { + "variable": "type", + "label": "Detection Type", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "motion", + "description": "Motion" + }, + { + "value": "person", + "description": "Person" + }, + { + "value": "vehicle", + "description": "Vehicle" + }, + { + "value": "ring", + "description": "Ring" + } + ] + } + } + ] + } + }, + { + "variable": "rcloneDestination", + "label": "Rclone Destination", + "description": "Rclone destination path in the format {rclone-remote}:{path-on-remote} \nE.g. `gdrive:/backups/unifi_protect`\n", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "rcloneArgs", + "label": "Rclone Arguments", + "description": "Optional extra arguments to pass to rclone rcat directly. One per line
\nCommon usage for this would be to set a bandwidth limit
\nE.g. --bwlimit 8M\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Argument", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "rclonePurgeArgs", + "label": "Rclone Purge Arguments", + "description": "Optional extra arguments to pass to rclone delete. One per line
\nCommon usage for this would be to execute a permanent delete\ninstead of using the recycle bin on a destination.
\nGoogle Drive example: --drive-use-trash=false\n", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Argument", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Unifi Protect Backup.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "upbID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Unifi Protect Backup files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Unifi Protect Backup files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "upbStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Unifi Protect Backup Config Storage", + "description": "The path to store Unifi Protect Backup Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "data", + "label": "Unifi Protect Backup Data Storage", + "description": "The path to store Unifi Protect Backup Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Unifi Protect Backup.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Unifi Protect Backup.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Unifi Protect Backup.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Unifi Protect Backup

\n

Unifi Protect Backup is a python based tool for backing up UniFi Protect event clips as they occur.

", + "detailed_readme": "

Unifi Protect Backup

\n

Unifi Protect Backup is a python based tool for backing up UniFi Protect event clips as they occur.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/vaultwarden/app_versions.json b/community/vaultwarden/app_versions.json new file mode 100644 index 0000000000..c522452b40 --- /dev/null +++ b/community/vaultwarden/app_versions.json @@ -0,0 +1,583 @@ +{ + "1.0.28": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/vaultwarden/1.0.28", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/timezone" + ], + "human_version": "1.30.0_1.0.28", + "version": "1.0.28", + "chart_metadata": { + "name": "vaultwarden", + "description": "Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients.", + "annotations": { + "title": "Vaultwarden" + }, + "type": "application", + "version": "1.0.28", + "apiVersion": "v2", + "appVersion": "1.30.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://github.com/dani-garcia/vaultwarden", + "icon": "https://media.sys.truenas.net/apps/vaultwarden/icons/icon.png", + "sources": [ + "https://github.com/dani-garcia/vaultwarden", + "https://github.com/truenas/charts/tree/master/community/vaultwarden" + ], + "keywords": [ + "password", + "manager" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "vaultwarden", + "groupName": "vaultwarden", + "gid": 568, + "uid": 568, + "description": "Vaultwarden can run as any non-root user." + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Vaultwarden Configuration", + "description": "Configure Vaultwarden" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Vaultwarden" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Vaultwarden" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Vaultwarden" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Vaultwarden" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + }, + "admin_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_admin_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Vaultwarden Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "vaultwardenConfig", + "label": "", + "group": "Vaultwarden Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "adminToken", + "label": "Admin Token", + "description": "Setting this, will enable the admin portal", + "schema": { + "type": "string", + "private": true, + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Vaultwarden.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "vaultwardenRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Vaultwarden will run as.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Vaultwarden will run as.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "vaultwardenNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Vaultwarden Web UI.", + "schema": { + "type": "int", + "default": 30032, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "wsEnabled", + "label": "Enable Websocket", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "wsPort", + "label": "Websocket Port", + "description": "The port for the Vaultwarden Websocket.", + "schema": { + "type": "int", + "show_if": [ + [ + "wsEnabled", + "=", + true + ] + ], + "default": 30033, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "domain", + "label": "Domain", + "description": "The domain to use for Vaultwarden
\nFormat is: https://sub.domain.tld:port\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Vaultwarden
\nUsing the Rocket method for TLS setup is NOT recommended
\nPrefer a reverse proxy with a valid certificate
\n", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "vaultwardenStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Vaultwarden Data Storage", + "description": "The path to store Vaultwarden attachments, icons, etc.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgData", + "label": "Vaultwarden Postgres Data Storage", + "description": "The path to store Vaultwarden Postgres Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Vaultwarden Postgres Backup Storage", + "description": "The path to store Vaultwarden Postgres Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "pgBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Vaultwarden.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Vaultwarden.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Vaultwarden

\n

Vaultwarden Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients

\n
\n

During the installation process, a container will be launched with root privileges. This is required\nin order to apply the correct permissions to the Vaultwarden data directory. Afterward, the Vaultwarden container\nwill run as a non-root user (default 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the Vaultwarden and postgres data directories.

\n
\n

While the option to use Rocket for TLS is there, it is not\nrecommended.\nInstead, use a reverse proxy to handle TLS termination.

\n

Using HTTPS is required for the most of the features to work (correctly).

", + "detailed_readme": "

Vaultwarden

\n

Vaultwarden Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients

\n
\n

During the installation process, a container will be launched with root privileges. This is required\nin order to apply the correct permissions to the Vaultwarden data directory. Afterward, the Vaultwarden container\nwill run as a non-root user (default 568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the Vaultwarden and postgres data directories.

\n
\n

While the option to use Rocket for TLS is there, it is not\nrecommended.\nInstead, use a reverse proxy to handle TLS termination.

\n

Using HTTPS is required for the most of the features to work (correctly).

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/webdav/app_versions.json b/community/webdav/app_versions.json new file mode 100644 index 0000000000..cba9337e8f --- /dev/null +++ b/community/webdav/app_versions.json @@ -0,0 +1,440 @@ +{ + "1.0.12": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/webdav/1.0.12", + "last_update": "2023-10-20 04:50:38", + "required_features": [ + "definitions/certificate" + ], + "human_version": "2.4.58_1.0.12", + "version": "1.0.12", + "chart_metadata": { + "name": "webdav", + "description": "WebDAV is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.", + "annotations": { + "title": "WebDAV" + }, + "type": "application", + "version": "1.0.12", + "apiVersion": "v2", + "appVersion": "2.4.58", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "http://www.webdav.org/", + "icon": "https://media.sys.truenas.net/apps/webdav/icons/icon.png", + "sources": [ + "http://www.webdav.org/", + "https://github.com/truenas/charts/tree/master/community/webdav" + ], + "keywords": [ + "webdav", + "file-sharing" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "webdav", + "groupName": "webdav", + "gid": 568, + "uid": 568, + "description": "WebDAV can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "WebDAV Configuration", + "description": "Configure WebDAV" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for WebDAV" + }, + { + "name": "Network Configuration", + "description": "Configure Network for WebDAV" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for WebDAV" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for WebDAV" + } + ], + "questions": [ + { + "variable": "webdavConfig", + "label": "", + "group": "WebDAV Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "authType", + "label": "Authentication Type", + "description": "Select the authentication type for WebDAV.", + "schema": { + "type": "string", + "default": "none", + "enum": [ + { + "value": "none", + "description": "No Authentication" + }, + { + "value": "basic", + "description": "Basic Authentication" + } + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for basic authentication.", + "schema": { + "type": "string", + "show_if": [ + [ + "authType", + "=", + "basic" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for basic authentication.", + "schema": { + "type": "string", + "show_if": [ + [ + "authType", + "=", + "basic" + ] + ], + "private": true, + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for WebDAV.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webdavRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that WebDAV will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 666, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that WebDAV will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 666, + "required": true + } + } + ] + } + }, + { + "variable": "webdavNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "http", + "label": "Enable HTTP", + "description": "Enable HTTP for WebDAV.", + "schema": { + "type": "boolean", + "default": true, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "httpPort", + "label": "HTTP Port", + "description": "The port for HTTP WebDAV.", + "schema": { + "type": "int", + "default": 30034, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "https", + "label": "Enable HTTPS", + "description": "Enable HTTPS for WebDAV.", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "httpsPort", + "label": "HTTPS Port", + "description": "The port for HTTPS WebDAV.", + "schema": { + "type": "int", + "default": 30035, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for HTTPS WebDAV.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "webdavStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "shares", + "label": "Shares", + "description": "Shares for WebDAV.", + "schema": { + "type": "list", + "empty": false, + "required": true, + "default": [], + "items": [ + { + "variable": "shareEntry", + "label": "Share Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the share", + "description": "Enable the share.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "name", + "label": "Share Name", + "description": "The name of the share.
\nAlso serves as the endpoint for the share.
\nExample: [share1] will be available at [http://:/share1]\n", + "schema": { + "type": "string", + "valid_chars": "^[a-zA-Z0-9_-]+$", + "valid_chars_error": "Share name can only consist of [Letters(a-z, A-Z), Numbers(0-9), Underscores(_), Dashes(-)]", + "required": true + } + }, + { + "variable": "description", + "label": "Description", + "description": "Share description. Only used for documentation.", + "schema": { + "type": "string" + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for the share.", + "schema": { + "type": "hostpath", + "required": true + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "description": "Enable read only access to the share.
\nThis will disable write access to the share.
\nData will be mounted as read only.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "fixPermissions", + "label": "Fix Permissions", + "description": "Enable permission fix for the share.
\nThis will fix the permissions of the share on startup.
\nThis will change the owner of the share to the user and group specified in [User and Group Configuration].
\nNote: This will still change permissions even if [Read Only] for the share is enabled.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for WebDAV.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for WebDAV.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

WebDAV

\n

WebDAV is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.

\n
\n

When application is installed and Fix Permissions is selected on at least 1 share\na container will be launched with root privileges. This is required in order to apply\nthe correct permissions to the WebDAV shares/directories.\nAfterward, the WebDAV container will run as a non-root user (Default: 666).\nChown will only apply if the parent directory does not match the configured user and group.

\n
", + "detailed_readme": "

WebDAV

\n

WebDAV is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.

\n
\n

When application is installed and Fix Permissions is selected on at least 1 share\na container will be launched with root privileges. This is required in order to apply\nthe correct permissions to the selected WebDAV shares/directories.\nAfterward, the WebDAV container will run as a non-root user (Default: 666).\nNote that chown will only apply if the parent directory does not match the configured user and group.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/whoogle/app_versions.json b/community/whoogle/app_versions.json new file mode 100644 index 0000000000..0ed789a150 --- /dev/null +++ b/community/whoogle/app_versions.json @@ -0,0 +1,466 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/whoogle/1.1.2", + "last_update": "2023-11-02 11:28:44", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "0.8.4_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "whoogle", + "description": "Whoogle is a self-hosted, ad-free, privacy-respecting metasearch engine", + "annotations": { + "title": "Whoogle" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "0.8.4", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.0" + } + ], + "home": "https://github.com/benbusby/whoogle-search", + "icon": "https://media.sys.truenas.net/apps/whoogle/icons/icon.png", + "sources": [ + "https://github.com/benbusby/whoogle-search", + "https://github.com/truenas/charts/tree/master/library/ix-dev/community/whoogle", + "https://hub.docker.com/r/benbusby/whoogle-search" + ], + "keywords": [ + "search", + "engine" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "whoogle", + "groupName": "whoogle", + "gid": 927, + "uid": 927, + "description": "Whoogle runs as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Whoogle Configuration", + "description": "Configure Whoogle" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Whoogle" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Whoogle" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Whoogle" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Whoogle" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "whoogleConfig", + "label": "", + "group": "Whoogle Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "redirects", + "label": "Specify sites that should be redirected elsewhere", + "description": "Configure redirects for Whoogle.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "redirect", + "label": "Redirect", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "src", + "label": "Source", + "description": "The source domain.
\nFormat: domain.tld\n", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "dst", + "label": "Destination", + "description": "The destination domain.
\nFormat: domain.tld\n", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Whoogle.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "whoogleNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Whoogle Web UI.", + "schema": { + "type": "int", + "default": 30098, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "whoogleStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Whoogle.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Whoogle.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Whoogle.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Whoogle

\n

Whoogle is a self-hosted, ad-free, privacy-respecting metasearch engine

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Whoogle directories.\nAfterward, the Whoogle container will run as a non-root user (927).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

See Whoogle's Docs for a list of available environment variables.\nNote that all configuration via WebUI will be reset if the container is restarted.\nOnly config changes made via environment variables will persist.

", + "detailed_readme": "

Whoogle

\n

Whoogle is a self-hosted, ad-free, privacy-respecting metasearch engine

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Whoogle directories.\nAfterward, the Whoogle container will run as a non-root user (927).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
\n

See Whoogle's Docs for a list of available environment variables.\nNote that all configuration via WebUI will be reset if the container is restarted.\nOnly config changes made via environment variables will persist.

", + "changelog": null + } +} \ No newline at end of file diff --git a/community/wordpress/app_versions.json b/community/wordpress/app_versions.json new file mode 100644 index 0000000000..1228ee49a8 --- /dev/null +++ b/community/wordpress/app_versions.json @@ -0,0 +1,661 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/wordpress/1.1.2", + "last_update": "2023-11-08 12:52:59", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "6.4.0_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "wordpress", + "description": "Wordpress is a web content management system", + "annotations": { + "title": "Wordpress" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "6.4.0", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://wordpress.org", + "icon": "https://media.sys.truenas.net/apps/wordpress/icons/icon.png", + "sources": [ + "https://hub.docker.com/_/wordpress", + "https://github.com/truenas/charts/tree/master/community/wordpress" + ], + "keywords": [ + "cms", + "blog" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "www-data", + "groupName": "www-data", + "gid": 33, + "uid": 33, + "description": "Wordpress run as a non-root user (33)" + } + ], + "capabilities": [ + { + "name": "NET_BIND_SERVICE", + "description": "Wordpress requires this ability to bind to port 80 within the container." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Wordpress Configuration", + "description": "Configure Wordpress" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Wordpress" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Wordpress" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Wordpress" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + }, + "admin": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "/wp-admin" + } + }, + "questions": [ + { + "variable": "wpConfig", + "label": "", + "group": "Wordpress Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enableCronJob", + "label": "Enable CronJob", + "description": "Enable CronJob for Wordpress executed by Kubernetes scheduler.
\nThis will also disable running cron on page load.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "cronSchedule", + "label": "Cron Schedule", + "description": "Cron schedule for Wordpress CronJob.", + "schema": { + "type": "string", + "default": "*/15 * * * *", + "show_if": [ + [ + "enableCronJob", + "=", + true + ] + ], + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Wordpress.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "wpNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Wordpress WebUI.", + "schema": { + "type": "int", + "default": 30040, + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "wpStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "Wordpress Data Storage", + "description": "The path to store Wordpress data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbData", + "label": "Wordpress MariaDB Data Storage", + "description": "The path to store Wordpress MariaDB Data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbData", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "mariadbBackup", + "label": "Wordpress MariaDB Backup Storage", + "description": "The path to store Wordpress MariaDB Backup.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "mariadbBackup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Wordpress.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Wordpress.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Wordpress.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Wordpress

\n

Wordpress is a web content management system.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the wordpress directories.\nAfterward, the wordpress container will run as a non-root user (33).\nSame applies to the mariadb container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the mariadb backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the wordpress and mariadb data directories.

\n
", + "detailed_readme": "

Wordpress

\n

Wordpress is a web content management system.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the wordpress directories.\nAfterward, the wordpress container will run as a non-root user (33).\nSame applies to the mariadb container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the mariadb backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the wordpress and mariadb data directories.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/community/zerotier/app_versions.json b/community/zerotier/app_versions.json new file mode 100644 index 0000000000..7d0987304d --- /dev/null +++ b/community/zerotier/app_versions.json @@ -0,0 +1,295 @@ +{ + "1.0.11": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/zerotier/1.0.11", + "last_update": "2023-10-19 04:50:58", + "required_features": [], + "human_version": "1.12.2_1.0.11", + "version": "1.0.11", + "chart_metadata": { + "name": "zerotier", + "description": "Securely connect any device, anywhere.", + "annotations": { + "title": "Zerotier" + }, + "type": "application", + "version": "1.0.11", + "apiVersion": "v2", + "appVersion": "1.12.2", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://www.zerotier.com", + "icon": "https://media.sys.truenas.net/apps/zerotier/icons/icon.png", + "sources": [ + "https://www.zerotier.com", + "https://github.com/truenas/charts/tree/master/community/zerotier", + "https://hub.docker.com/r/zerotier/zerotier" + ], + "keywords": [ + "vpn", + "zerotier" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Zerotier requires root privileges to start the Zerotier process" + } + ], + "capabilities": [ + { + "name": "NET_ADMIN", + "description": "Zerotier requires NET_ADMIN to configure the VPN interface, modify routes, etc." + }, + { + "name": "NET_RAW", + "description": "Zerotier requires NET_RAW to use raw sockets and proxying" + }, + { + "name": "AUDIT_WRITE", + "description": "Zerotier is able to write to audit log." + }, + { + "name": "CHOWN", + "description": "Zerotier is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Zerotier is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Zerotier is able bypass permission checks for it's sub-processes." + }, + { + "name": "NET_BIND_SERVICE", + "description": "Zerotier is able to bind to privileged ports." + }, + { + "name": "SETGID", + "description": "Zerotier is able to set group ID for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Zerotier is able to set user ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Zerotier is able to set process capabilities." + }, + { + "name": "SYS_ADMIN", + "description": "Zerotier is able to perform various system administration operations." + } + ], + "hostMounts": [ + { + "hostPath": "/dev/tun", + "description": "Required to access the TUN device" + } + ] + }, + "schema": { + "groups": [ + { + "name": "Zerotier Configuration", + "description": "Configure Zerotier" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Zerotier" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Zerotier" + } + ], + "questions": [ + { + "variable": "zerotierConfig", + "label": "", + "group": "Zerotier Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "networks", + "label": "Networks", + "description": "The network(s) to join", + "schema": { + "type": "list", + "empty": false, + "required": true, + "min": 1, + "default": [], + "items": [ + { + "variable": "networkEntry", + "label": "Network", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "authToken", + "label": "Auth Token (API Key)", + "description": "(Optional) The auth token for Zerotier.
\nSame as authtoken.secret.\n", + "schema": { + "type": "string", + "default": "", + "private": true + } + }, + { + "variable": "identitySecret", + "label": "Identity Secret", + "description": "(Optional) The identity secret for Zerotier.
\nSame as identity.secret.\n", + "schema": { + "type": "string", + "default": "", + "private": true + } + }, + { + "variable": "identityPublic", + "label": "Identity Public", + "description": "(Optional) The identity public for Zerotier.
\nSame as identity.public.\n", + "schema": { + "type": "string", + "default": "", + "private": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Zerotier.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "zerotierNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Zerotier.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Zerotier.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Zerotier

\n

Zerotier Securely connect any device, anywhere.

", + "detailed_readme": "

Zerotier

\n

Zerotier Securely connect any device, anywhere.

", + "changelog": null + } +} \ No newline at end of file diff --git a/enterprise/minio/app_versions.json b/enterprise/minio/app_versions.json new file mode 100644 index 0000000000..0f079c21ab --- /dev/null +++ b/enterprise/minio/app_versions.json @@ -0,0 +1,641 @@ +{ + "1.0.23": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/enterprise/minio/1.0.23", + "last_update": "2023-11-09 07:52:49", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate" + ], + "human_version": "2023-03-24_1.0.23", + "version": "1.0.23", + "chart_metadata": { + "name": "minio", + "description": "High Performance, Kubernetes Native Object Storage", + "annotations": { + "title": "MinIO" + }, + "type": "application", + "version": "1.0.23", + "apiVersion": "v2", + "appVersion": "2023-03-24", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://min.io", + "icon": "https://media.sys.truenas.net/apps/minio/icons/icon.png", + "sources": [ + "https://github.com/minio/minio", + "https://github.com/truenas/charts/tree/master/enterprise/minio" + ], + "keywords": [ + "storage", + "object-storage", + "S3" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "minio", + "groupName": "minio", + "gid": 568, + "uid": 568, + "description": "Minio can run as any non-root user." + }, + { + "userName": "logsearch", + "groupName": "logsearch", + "gid": 568, + "uid": 568, + "description": "Minio's logsearch can run as any non-root user." + }, + { + "userName": "postgres", + "groupName": "postgres", + "gid": 999, + "uid": 999, + "description": "Postgres runs as a non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "MinIO Credentials", + "description": "Configure Credentials for MinIO" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for MinIO" + }, + { + "name": "Network Configuration", + "description": "Configure Network for MinIO" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for MinIO" + }, + { + "name": "MultiMode Configuration", + "description": "Configure MultiMode for MinIO" + }, + { + "name": "MinIO Logging", + "description": "Configure Logging for MinIO" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for MinIO" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "minioCreds", + "label": "", + "group": "MinIO Credentials", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "rootUser", + "label": "Root User", + "description": "The access key for the root user.", + "schema": { + "type": "string", + "min_length": 5, + "required": true + } + }, + { + "variable": "rootPass", + "label": "Root Password", + "description": "The secret key for the root user.", + "schema": { + "type": "string", + "required": true, + "min_length": 8, + "private": true + } + } + ] + } + }, + { + "variable": "minioRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that MinIO will run as.
\nCan't be changed after initial install.\n", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "immutable": true, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that MinIO will run as.
\nCan't be changed after initial install.\n", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "minioNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "apiPort", + "label": "API Port", + "description": "The port for the MinIO API.", + "schema": { + "type": "int", + "default": 30000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the MinIO Web UI.", + "schema": { + "type": "int", + "default": 30001, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for MinIO", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + }, + { + "variable": "serverUrl", + "label": "MinIO Server URL (API)", + "description": "The URL that console will use to reach API
\nFor example https://minio1.example.com.

\n", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "consoleUrl", + "label": "MinIO Browser Redirect URL", + "description": "The URL that console will provide as a redirect URL
\nFor example https://console.example.com.

\n", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "enableMultiMode", + "label": "Enable Multi Mode (SNMD or MNMD)", + "group": "MultiMode Configuration", + "description": "For Single Node Multi Drive (SNMD), the entry will look like this:
\nExample Entry - /data{1...4}

\nFor Multi Node Multi Drive (MNMD), the entry will look like this:
\nExample Entry - https://minio{1...3}.example.com:30000/data{1...4}

\nNote that each host must use the same port number and the same number of storage items.
\nIn both cases /data{1...4} is the directories to be used for MinIO.\nYou have to add additional storage for each data entry.\n", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "minioMultiMode", + "label": "Multi Mode (SNMD or MNMD)", + "group": "MultiMode Configuration", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "item", + "label": "", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "minioStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "list", + "default": [ + { + "type": "ixVolume", + "mountPath": "/data1", + "datasetName": "data1" + } + ], + "empty": false, + "required": true, + "items": [ + { + "variable": "item", + "label": "Storage Item", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "immutable": true, + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true, + "immutable": true, + "default": "/data1" + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "required": true, + "immutable": true, + "default": "", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "data1", + "$ref": [ + "normalize/ixVolume" + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "minioLogging", + "label": "", + "group": "MinIO Logging", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "anonymous", + "label": "Anonymous", + "description": "Hides sensitive information from logging.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "quiet", + "label": "Quiet", + "description": "Disables startup information.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "logsearch", + "label": "LogSearch Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable LogSearch", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "diskCapacityGB", + "label": "Disk Capacity (GB)", + "description": "The disk capacity for LogSearch.", + "schema": { + "type": "int", + "default": 5, + "required": true + } + }, + { + "variable": "pgData", + "label": "Postgres Data Storage", + "description": "The path to store Postgres data.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path" + }, + { + "value": "ixVolume", + "description": "ixVolume" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "postgres-data", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "pgBackup", + "label": "Postgres Backup Storage", + "description": "The path to store Postgres backups.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path" + }, + { + "value": "ixVolume", + "description": "ixVolume" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "postgres-backup", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "label": "", + "group": "Resources Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for MinIO.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for MinIO.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

MinIO

\n

MinIO is a High Performance Object Storage released under Apache License v2.0.\nIt is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure\nfor machine learning, analytics and application data workloads.

\n
\n

During the installation process, a container will be launched with root privileges. This is required\nin order to apply the correct permissions to the MinIO data directory. Afterward, the MinIO container\nwill run as a non-root user (568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the MinIO and postgres data directories.

\n
\n

When Multi Mode is enabled and entries contain :// (url) will enable Host Networking. Regardless of the selection in the Networking section.

", + "detailed_readme": "

MinIO

\n

MinIO is a High Performance Object Storage released under Apache License v2.0.\nIt is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure\nfor machine learning, analytics and application data workloads.

\n
\n

During the installation process, a container will be launched with root privileges. This is required\nin order to apply the correct permissions to the MinIO data directory. Afterward, the MinIO container\nwill run as a non-root user (568).\nSame applies to the postgres container. This will run afterwards as a non-root user (999).\nOn each upgrade, a container will be launched with root privileges in order to apply the correct\npermissions to the postgres backups directory. Container that performs the backup will run as a non-root user (999) afterwards.\nKeep in mind the permissions on the backup directory will be changed to 999:999 on every update.\nBut will only be changed once for the MinIO and postgres data directories.

\n
\n

When Multi Mode is enabled and entries contain :// (url) will enable Host Networking. Regardless of the selection in the Networking section.

", + "changelog": null + } +} \ No newline at end of file diff --git a/enterprise/syncthing/app_versions.json b/enterprise/syncthing/app_versions.json new file mode 100644 index 0000000000..735e754256 --- /dev/null +++ b/enterprise/syncthing/app_versions.json @@ -0,0 +1,579 @@ +{ + "1.1.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/enterprise/syncthing/1.1.2", + "last_update": "2023-10-28 18:49:10", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/timezone" + ], + "human_version": "1.23.3_1.1.2", + "version": "1.1.2", + "chart_metadata": { + "name": "syncthing", + "description": "Syncthing is a continuous file synchronization program.", + "annotations": { + "title": "Syncthing" + }, + "type": "application", + "version": "1.1.2", + "apiVersion": "v2", + "appVersion": "1.23.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://syncthing.net/", + "icon": "https://media.sys.truenas.net/apps/syncthing/icons/icon.svg", + "sources": [ + "https://syncthing.net/", + "https://github.com/syncthing/syncthing", + "https://hub.docker.com/r/syncthing/syncthing", + "https://github.com/truenas/charts/tree/master/enterprise/syncthing" + ], + "keywords": [ + "sync", + "file-sharing" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Syncthing runs as root and starts the syncthing process as a non-root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Syncthing is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Syncthing is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Syncthing is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Syncthing is able to set user ID for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Syncthing is able to set group ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Syncthing is able to set process capabilities." + }, + { + "name": "SETFCAP", + "description": "Syncthing is able to set file capabilities." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Syncthing Configuration", + "description": "Configure Syncthing" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Syncthing" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Syncthing" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Syncthing" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Syncthing" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Syncthing Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "syncthingID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Syncthing files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "immutable": true, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Syncthing files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "syncthingNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network.

\nIf this is disabled, you will need to add your local networks in CIDR format to the Syncthing WebUI.
\nIn the Syncthing WebUI, go to Advanced Settings > Options > Always Local Nets
\nSeparate each CIDR network with a comma.
\nExample: 192.168.0.0/24,192.168.1.0/24\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Syncthing WebUI.", + "schema": { + "type": "int", + "default": 31000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "tcpPort", + "label": "TCP Port (File Transfers)", + "description": "The TCP port for Syncthing transfers.", + "schema": { + "type": "int", + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "default": 22000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "quicPort", + "label": "QUIC (UDP) Port (File Transfers)", + "description": "The QUIC (UDP) port for Syncthing transfers.", + "schema": { + "type": "int", + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "default": 22000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Syncthing GUI.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "syncthingStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "home", + "label": "Syncthing Home Storage", + "description": "The path to store Syncthing Home Directory.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "immutable": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "home", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Syncthing.", + "schema": { + "type": "list", + "required": true, + "empty": false, + "default": [ + { + "type": "hostPath", + "mountPath": "/data1", + "hostPath\"": "" + } + ], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "Host Path: Is a path that already exists on the system.
\nSMB Share: Mounts a persistent volume claim to a SMB share.\n", + "schema": { + "type": "string", + "required": true, + "default": "hostPath", + "immutable": true, + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Syncthing.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Syncthing.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Syncthing

\n

Syncthing is a file synchronization program.

\n

At each startup of the application, the following settings are applied:

\n
    \n
  • Disable automatic upgrades
  • \n
  • Disable anonymous usage reporting
  • \n
  • Disable NAT traversal
  • \n
  • Disable global discovery
  • \n
  • Disable local discovery
  • \n
  • Disable relaying
  • \n
  • Disable announcing LAN addresses
  • \n
\n

Additionally, the following defaults are set for new synthing \"folders\":

\n
    \n
  • Max total size of xattr: 10 MiB
  • \n
  • Max size per xattr: 2 MiB
  • \n
  • Enable send and sync of xattr
  • \n
  • Enable send and sync of ownership
  • \n
", + "detailed_readme": "

Syncthing

\n

Syncthing is a file synchronization program.

\n

At each startup of the application, the following settings are applied:

\n
    \n
  • Disable automatic upgrades
  • \n
  • Disable anonymous usage reporting
  • \n
  • Disable NAT traversal
  • \n
  • Disable global discovery
  • \n
  • Disable local discovery
  • \n
  • Disable relaying
  • \n
  • Disable announcing LAN addresses
  • \n
\n

Additionally, the following defaults are set for new synthing \"folders\":

\n
    \n
  • Max total size of xattr: 10 MiB
  • \n
  • Max size per xattr: 2 MiB
  • \n
  • Enable send and sync of xattr
  • \n
  • Enable send and sync of ownership
  • \n
", + "changelog": null + } +} \ No newline at end of file diff --git a/test/jellyfin/app_versions.json b/test/jellyfin/app_versions.json new file mode 100644 index 0000000000..8aa6f68d2f --- /dev/null +++ b/test/jellyfin/app_versions.json @@ -0,0 +1,735 @@ +{ + "1.0.15": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/test/jellyfin/1.0.15", + "last_update": "2023-11-06 12:56:51", + "required_features": [ + "normalize/ixVolume", + "definitions/gpuConfiguration" + ], + "human_version": "10.8.12_1.0.15", + "version": "1.0.15", + "chart_metadata": { + "name": "jellyfin", + "description": "Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.", + "annotations": { + "title": "Jellyfin" + }, + "type": "application", + "version": "1.0.15", + "apiVersion": "v2", + "appVersion": "10.8.12", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.2.1" + } + ], + "home": "https://jellyfin.org/", + "icon": "https://jellyfin.org/images/logo.svg", + "sources": [ + "https://hub.docker.com/r/jellyfin/jellyfin", + "https://github.com/truenas/charts/tree/master/community/jellyfin", + "https://jellyfin.org/" + ], + "keywords": [ + "media", + "streaming" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "jellyfin", + "groupName": "jellyfin", + "gid": 568, + "uid": 568, + "description": "Jellyfin runs as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Jellyfin Configuration", + "description": "Configure Jellyfin" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Jellyfin" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Jellyfin" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Jellyfin" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Jellyfin" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "jellyfinConfig", + "label": "", + "group": "Jellyfin Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "publishServerUrl", + "label": "Published Server URL", + "description": "Optional - The URL that Jellyfin will be advertised.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Jellyfin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "jellyfinRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Jellyfin will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Jellyfin will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "jellyfinNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. While it's recommended to keep this disabled.
\nIt's required for autodiscovery to work.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Jellyfin Web UI.", + "schema": { + "type": "int", + "default": 30013, + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "min": 9000, + "max": 65535, + "required": true + } + } + ] + } + }, + { + "variable": "jellyfinStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Jellyfin Config Storage", + "description": "The path to store Jellyfin Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "cache", + "label": "Jellyfin Cache Storage", + "description": "The path to store Jellyfin Cache.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "cache", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "transcodes", + "label": "Jellyfin Transcodes Storage", + "description": "The path to store Jellyfin Transcodes.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nemptyDir: Is a temporary directory that will be created on the disk or in memory.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "emptyDir", + "description": "emptyDir (Temporary directory created on the disk or in memory)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "transcodes", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + }, + { + "variable": "medium", + "label": "emptyDir Medium", + "description": "Disk: Creates a temporary directory on the disk.
\nMemory: Creates a temporary directory in memory.\n", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "default": "", + "enum": [ + { + "value": "", + "description": "Disk (Temporary directory created on the disk)" + }, + { + "value": "Memory", + "description": "Memory (Temporary directory created in memory)" + } + ] + } + }, + { + "variable": "size", + "label": "emptyDir Size Limit", + "description": "The maximum size of the temporary directory.
\nFor example: 2Gi\n", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "default": "2Gi" + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Jellyfin.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Jellyfin.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Jellyfin.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "jellyfinGPU", + "group": "Resources Configuration", + "label": "GPU Configuration", + "schema": { + "type": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + } + ] + }, + "app_readme": "

Jellyfin

\n

Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyfin directories.\nAfterward, the Jellyfin container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Jellyfin

\n

Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyfin directories.\nAfterward, the Jellyfin container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/test/sonarr/app_versions.json b/test/sonarr/app_versions.json new file mode 100644 index 0000000000..a1b3966049 --- /dev/null +++ b/test/sonarr/app_versions.json @@ -0,0 +1,536 @@ +{ + "1.0.16": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/test/sonarr/1.0.16", + "last_update": "2023-09-22 10:45:35", + "required_features": [ + "normalize/ixVolume" + ], + "human_version": "3.0.10.1567_1.0.16", + "version": "1.0.16", + "chart_metadata": { + "name": "sonarr", + "description": "Sonarr is a PVR for Usenet and BitTorrent users.", + "annotations": { + "title": "Sonarr" + }, + "type": "application", + "version": "1.0.16", + "apiVersion": "v2", + "appVersion": "3.0.10.1567", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://github.com/Sonarr/Sonarr", + "icon": "https://raw.githubusercontent.com/Sonarr/Sonarr/develop/Logo/256.png", + "sources": [ + "https://github.com/onedr0p/containers/tree/main/apps/sonarr", + "https://github.com/truenas/charts/tree/master/community/sonarr", + "https://github.com/Sonarr/Sonarr" + ], + "keywords": [ + "media", + "series" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "sonarr", + "groupName": "sonarr", + "gid": 568, + "uid": 568, + "description": "Sonarr can run as any non-root user." + } + ], + "capabilities": [], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Sonarr Configuration", + "description": "Configure Sonarr" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Sonarr" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Sonarr" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Sonarr" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Sonarr" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "sonarrConfig", + "label": "", + "group": "Sonarr Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "instanceName", + "label": "Instance Name", + "description": "The name of the Sonarr instance.", + "schema": { + "type": "string", + "default": "Sonarr", + "required": true + } + }, + { + "variable": "additionalEnvs", + "label": "Additional Environment Variables", + "description": "Configure additional environment variables for Sonarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "env", + "label": "Environment Variable", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "sonarrRunAs", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Sonarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Sonarr will run as.", + "schema": { + "type": "int", + "min": 2, + "default": 568, + "required": true + } + } + ] + } + }, + { + "variable": "sonarrNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Sonarr Web UI.", + "schema": { + "type": "int", + "default": 30027, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network. It's recommended to keep this disabled.
\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "sonarrStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "config", + "label": "Sonarr Config Storage", + "description": "The path to store Sonarr Configuration.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "config", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Sonarr.", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "description": "The name of the dataset to use for storage.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "immutable": true, + "default": "storage_entry", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Sonarr.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Sonarr.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Sonarr

\n

Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Sonarr directories.\nAfterward, the Sonarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "detailed_readme": "

Sonarr

\n

Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Sonarr directories.\nAfterward, the Sonarr container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", + "changelog": null + } +} \ No newline at end of file diff --git a/test/syncthing/app_versions.json b/test/syncthing/app_versions.json new file mode 100644 index 0000000000..41be5f102a --- /dev/null +++ b/test/syncthing/app_versions.json @@ -0,0 +1,577 @@ +{ + "1.0.13": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/__w/charts/charts/test/syncthing/1.0.13", + "last_update": "2023-09-08 15:07:33", + "required_features": [ + "normalize/ixVolume", + "definitions/certificate", + "definitions/timezone" + ], + "human_version": "1.23.3_1.0.13", + "version": "1.0.13", + "chart_metadata": { + "name": "syncthing", + "description": "Syncthing is a continuous file synchronization program.", + "annotations": { + "title": "Syncthing" + }, + "type": "application", + "version": "1.0.13", + "apiVersion": "v2", + "appVersion": "1.23.3", + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "dependencies": [ + { + "name": "common", + "repository": "file://../../../common", + "version": "1.1.1" + } + ], + "home": "https://syncthing.net/", + "icon": "https://syncthing.net/img/logo-horizontal.svg", + "sources": [ + "https://syncthing.net/", + "https://github.com/syncthing/syncthing", + "https://hub.docker.com/r/syncthing/syncthing", + "https://github.com/truenas/charts/tree/master/enterprise/syncthing" + ], + "keywords": [ + "sync", + "file-sharing" + ] + }, + "app_metadata": { + "runAsContext": [ + { + "userName": "root", + "groupName": "root", + "gid": 0, + "uid": 0, + "description": "Syncthing runs as root and starts the syncthing process as a non-root user." + } + ], + "capabilities": [ + { + "name": "CHOWN", + "description": "Syncthing is able to chown files." + }, + { + "name": "DAC_OVERRIDE", + "description": "Syncthing is able to bypass permission checks." + }, + { + "name": "FOWNER", + "description": "Syncthing is able bypass permission checks for it's sub-processes." + }, + { + "name": "SETUID", + "description": "Syncthing is able to set user ID for it's sub-processes." + }, + { + "name": "SETGID", + "description": "Syncthing is able to set group ID for it's sub-processes." + }, + { + "name": "SETPCAP", + "description": "Syncthing is able to set process capabilities." + }, + { + "name": "SETFCAP", + "description": "Syncthing is able to set file capabilities." + } + ], + "hostMounts": [] + }, + "schema": { + "groups": [ + { + "name": "Syncthing Configuration", + "description": "Configure Syncthing" + }, + { + "name": "User and Group Configuration", + "description": "Configure User and Group for Syncthing" + }, + { + "name": "Network Configuration", + "description": "Configure Network for Syncthing" + }, + { + "name": "Storage Configuration", + "description": "Configure Storage for Syncthing" + }, + { + "name": "Resources Configuration", + "description": "Configure Resources for Syncthing" + } + ], + "portals": { + "web_portal": { + "protocols": [ + "$kubernetes-resource_configmap_portal_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_portal_host" + ], + "ports": [ + "$kubernetes-resource_configmap_portal_port" + ], + "path": "$kubernetes-resource_configmap_portal_path" + } + }, + "questions": [ + { + "variable": "TZ", + "group": "Syncthing Configuration", + "label": "Timezone", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "required": true, + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "syncthingID", + "label": "", + "group": "User and Group Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "user", + "label": "User ID", + "description": "The user id that Syncthing files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "immutable": true, + "required": true + } + }, + { + "variable": "group", + "label": "Group ID", + "description": "The group id that Syncthing files will be owned by.", + "schema": { + "type": "int", + "min": 568, + "default": 568, + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "syncthingNetwork", + "label": "", + "group": "Network Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "hostNetwork", + "label": "Host Network", + "description": "Bind to the host network.

\nIf this is disabled, you will need to add your local networks in CIDR format to the Syncthing WebUI.
\nIn the Syncthing WebUI, go to Advanced Settings > Options > Always Local Nets
\nSeparate each CIDR network with a comma.
\nExample: 192.168.0.0/24,192.168.1.0/24\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "webPort", + "label": "Web Port", + "description": "The port for the Syncthing WebUI.", + "schema": { + "type": "int", + "default": 31000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "tcpPort", + "label": "TCP Port (File Transfers)", + "description": "The TCP port for Syncthing transfers.", + "schema": { + "type": "int", + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "default": 22000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "quicPort", + "label": "QUIC (UDP) Port (File Transfers)", + "description": "The QUIC (UDP) port for Syncthing transfers.", + "schema": { + "type": "int", + "show_if": [ + [ + "hostNetwork", + "=", + false + ] + ], + "default": 22000, + "min": 9000, + "max": 65535, + "required": true + } + }, + { + "variable": "certificateID", + "label": "Certificate", + "description": "The certificate to use for Syncthing GUI.", + "schema": { + "type": "int", + "null": true, + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null + } + } + ] + } + }, + { + "variable": "syncthingStorage", + "label": "", + "group": "Storage Configuration", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "home", + "label": "Syncthing Home Storage", + "description": "The path to store Syncthing Home Directory.", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "ixVolume", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "ixVolume", + "description": "ixVolume (Dataset created automatically by the system)" + } + ] + } + }, + { + "variable": "datasetName", + "label": "Dataset Name", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "ixVolume" + ] + ], + "required": true, + "hidden": true, + "immutable": true, + "default": "home", + "$ref": [ + "normalize/ixVolume" + ] + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "immutable": true, + "required": true + } + } + ] + } + }, + { + "variable": "additionalStorages", + "label": "Additional Storage", + "description": "Additional storage for Syncthing.", + "schema": { + "type": "list", + "required": true, + "empty": false, + "default": [ + { + "type": "hostPath", + "mountPath": "/data1", + "hostPath\"": "" + } + ], + "items": [ + { + "variable": "storageEntry", + "label": "Storage Entry", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "description": "Host Path: Is a path that already exists on the system.\n", + "schema": { + "type": "string", + "required": true, + "default": "hostPath", + "enum": [ + { + "value": "hostPath", + "description": "Host Path (Path that already exists on the system)" + }, + { + "value": "smb-pv-pvc", + "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" + } + ] + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "The path inside the container to mount the storage.", + "schema": { + "type": "path", + "required": true + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "The host path to use for storage.", + "schema": { + "type": "hostpath", + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "required": true + } + }, + { + "variable": "server", + "label": "Server", + "description": "The server for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "share", + "label": "Share", + "description": "The share name for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "domain", + "label": "Domain (Optional)", + "description": "The domain for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ] + } + }, + { + "variable": "username", + "label": "Username", + "description": "The username for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true + } + }, + { + "variable": "password", + "label": "Password", + "description": "The password for the SMB share.", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "private": true + } + }, + { + "variable": "size", + "label": "Size (in Gi)", + "description": "The size of the volume quota.", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "=", + "smb-pv-pvc" + ] + ], + "required": true, + "min": 1, + "default": 1 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources Configuration", + "label": "", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Limits", + "schema": { + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "CPU limit for Syncthing.", + "schema": { + "type": "string", + "max_length": 6, + "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", + "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", + "default": "4000m", + "required": true + } + }, + { + "variable": "memory", + "label": "Memory", + "description": "Memory limit for Syncthing.", + "schema": { + "type": "string", + "max_length": 12, + "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", + "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", + "default": "8Gi", + "required": true + } + } + ] + } + } + ] + } + } + ] + }, + "app_readme": "

Syncthing

\n

Syncthing is a file synchronization program.

\n

At each startup of the application, the following settings are applied:

\n
    \n
  • Disable automatic upgrades
  • \n
  • Disable anonymous usage reporting
  • \n
  • Disable NAT traversal
  • \n
  • Disable global discovery
  • \n
  • Disable local discovery
  • \n
  • Disable relaying
  • \n
  • Disable announcing LAN addresses
  • \n
\n

Additionally, the following defaults are set for new synthing \"folders\":

\n
    \n
  • Max total size of xattr: 10 MiB
  • \n
  • Max size per xattr: 2 MiB
  • \n
  • Enable send and sync of xattr
  • \n
  • Enable send and sync of ownership
  • \n
", + "detailed_readme": "

Syncthing

\n

Syncthing is a file synchronization program.

\n

At each startup of the application, the following settings are applied:

\n
    \n
  • Disable automatic upgrades
  • \n
  • Disable anonymous usage reporting
  • \n
  • Disable NAT traversal
  • \n
  • Disable global discovery
  • \n
  • Disable local discovery
  • \n
  • Disable relaying
  • \n
  • Disable announcing LAN addresses
  • \n
\n

Additionally, the following defaults are set for new synthing \"folders\":

\n
    \n
  • Max total size of xattr: 10 MiB
  • \n
  • Max size per xattr: 2 MiB
  • \n
  • Enable send and sync of xattr
  • \n
  • Enable send and sync of ownership
  • \n
", + "changelog": null + } +} \ No newline at end of file