From ef599035afd9a974e3dbd25fbdfb4181ce3b2a8b Mon Sep 17 00:00:00 2001 From: Stavros kois Date: Thu, 31 Oct 2024 18:45:30 +0200 Subject: [PATCH] bump lib to 1.1.5 --- ix-dev/community/actual-budget/app.yaml | 6 +- .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../{base_v1_1_4 => base_v1_1_5}/utils.py | 21 +-- ix-dev/community/adguard-home/app.yaml | 6 +- .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../{base_v1_1_4 => base_v1_1_5}/utils.py | 21 +-- ix-dev/community/audiobookshelf/app.yaml | 6 +- .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../{base_v1_1_4 => base_v1_1_5}/utils.py | 21 +-- ix-dev/community/autobrr/app.yaml | 6 +- .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../{base_v1_1_4 => base_v1_1_5}/utils.py | 21 +-- ix-dev/community/bazarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/briefkasten/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/castopod/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/chia/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/clamav/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/cloudflared/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/dashy/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/ddns-updater/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ .../{v1_0_24 => v1_0_25}/__init__.py | 0 .../{v1_0_24 => v1_0_25}/config.py | 2 +- ix-dev/community/deluge/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/distribution/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/dockge/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/drawio/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/filebrowser/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/firefly-iii/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/flame/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/freshrss/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/frigate/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/fscrawler/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/gitea/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/grafana/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/handbrake/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/homarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/homepage/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/homer/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/immich/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/invidious/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/ipfs/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/jellyfin/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/jellyseerr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/jenkins/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/joplin/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/kapowarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/kavita/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/komga/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/lidarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/linkding/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/listmonk/app.yaml | 8 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/logseq/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/mealie/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/metube/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/minecraft/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/mineos/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/mumble/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/n8n/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/navidrome/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/netbootxyz/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/nginx-proxy-manager/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/node-red/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/odoo/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/omada-controller/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/organizr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/overseerr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/palworld/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/paperless-ngx/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/passbolt/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/pgadmin/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/pigallery2/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/piwigo/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/planka/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/plex-auto-languages/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/portainer/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/prowlarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/qbittorrent/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/radarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/readarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/recyclarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/redis/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/roundcube/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/rsyncd/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/rust-desk/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/sabnzbd/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/searxng/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/sftpgo/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/sonarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/tailscale/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ .../tailscale/{v1_1_16 => v1_1_17}/util.py | 2 +- ix-dev/community/tautulli/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/tdarr/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/terraria/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/tftpd-hpa/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/tiny-media-manager/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/transmission/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/twofactor-auth/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/unifi-controller/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ .../community/unifi-protect-backup/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/vaultwarden/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/vikunja/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/webdav/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/whoogle/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/wordpress/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/community/zerotier/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/enterprise/minio/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ .../minio/{v1_1_8 => v1_1_9}/__init__.py | 0 .../minio/{v1_1_8 => v1_1_9}/data.py | 2 +- ix-dev/enterprise/syncthing/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/collabora/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/diskoverdata/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/elastic-search/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/emby/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/home-assistant/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/ix-app/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/minio/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/netdata/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/photoprism/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/pihole/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/plex/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/prometheus/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/storj/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/syncthing/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ ix-dev/stable/wg-easy/app.yaml | 6 +- .../templates/library/base_v1_1_4/utils.py | 135 ------------------ .../{base_v1_1_4 => base_v1_1_5}/__init__.py | 0 .../environment.py | 0 .../healthchecks.py | 0 .../{base_v1_1_4 => base_v1_1_5}/mariadb.py | 0 .../{base_v1_1_4 => base_v1_1_5}/metadata.py | 0 .../{base_v1_1_4 => base_v1_1_5}/network.py | 0 .../permissions.py | 0 .../{base_v1_1_4 => base_v1_1_5}/ports.py | 0 .../{base_v1_1_4 => base_v1_1_5}/postgres.py | 0 .../{base_v1_1_4 => base_v1_1_5}/redis.py | 0 .../{base_v1_1_4 => base_v1_1_5}/resources.py | 0 .../{base_v1_1_4 => base_v1_1_5}/security.py | 0 .../{base_v1_1_4 => base_v1_1_5}/storage.py | 0 .../templates/library/base_v1_1_5/utils.py | 124 ++++++++++++++++ 1777 files changed, 13625 insertions(+), 14846 deletions(-) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) rename ix-dev/community/actual-budget/templates/library/{base_v1_1_4 => base_v1_1_5}/utils.py (77%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) rename ix-dev/community/adguard-home/templates/library/{base_v1_1_4 => base_v1_1_5}/utils.py (77%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) rename ix-dev/community/audiobookshelf/templates/library/{base_v1_1_4 => base_v1_1_5}/utils.py (77%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) rename ix-dev/community/autobrr/templates/library/{base_v1_1_4 => base_v1_1_5}/utils.py (77%) delete mode 100644 ix-dev/community/bazarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/bazarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/bazarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/briefkasten/templates/library/base_v1_1_4/utils.py rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/briefkasten/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/briefkasten/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/castopod/templates/library/base_v1_1_4/utils.py rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/castopod/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/castopod/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/chia/templates/library/base_v1_1_4/utils.py rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/chia/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/chia/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/clamav/templates/library/base_v1_1_4/utils.py rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/clamav/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/clamav/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/cloudflared/templates/library/base_v1_1_4/utils.py rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/cloudflared/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/cloudflared/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/dashy/templates/library/base_v1_1_4/utils.py rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/dashy/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/dashy/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/ddns-updater/templates/library/base_v1_1_4/utils.py rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/ddns-updater/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/ddns-updater/templates/library/base_v1_1_5/utils.py rename ix-dev/community/ddns-updater/templates/library/community/ddns-updater/{v1_0_24 => v1_0_25}/__init__.py (100%) rename ix-dev/community/ddns-updater/templates/library/community/ddns-updater/{v1_0_24 => v1_0_25}/config.py (99%) delete mode 100644 ix-dev/community/deluge/templates/library/base_v1_1_4/utils.py rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/deluge/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/deluge/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/distribution/templates/library/base_v1_1_4/utils.py rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/distribution/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/distribution/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/dockge/templates/library/base_v1_1_4/utils.py rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/dockge/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/dockge/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/drawio/templates/library/base_v1_1_4/utils.py rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/drawio/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/drawio/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/filebrowser/templates/library/base_v1_1_4/utils.py rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/filebrowser/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/filebrowser/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/firefly-iii/templates/library/base_v1_1_4/utils.py rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/firefly-iii/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/firefly-iii/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/flame/templates/library/base_v1_1_4/utils.py rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/flame/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/flame/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/freshrss/templates/library/base_v1_1_4/utils.py rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/freshrss/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/freshrss/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/frigate/templates/library/base_v1_1_4/utils.py rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/frigate/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/frigate/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/fscrawler/templates/library/base_v1_1_4/utils.py rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/fscrawler/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/fscrawler/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/gitea/templates/library/base_v1_1_4/utils.py rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/gitea/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/gitea/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/grafana/templates/library/base_v1_1_4/utils.py rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/grafana/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/grafana/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/handbrake/templates/library/base_v1_1_4/utils.py rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/handbrake/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/handbrake/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/homarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/homarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/homarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/homepage/templates/library/base_v1_1_4/utils.py rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/homepage/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/homepage/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/homer/templates/library/base_v1_1_4/utils.py rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/homer/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/homer/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/immich/templates/library/base_v1_1_4/utils.py rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/immich/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/immich/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/invidious/templates/library/base_v1_1_4/utils.py rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/invidious/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/invidious/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/ipfs/templates/library/base_v1_1_4/utils.py rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/ipfs/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/ipfs/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/jellyfin/templates/library/base_v1_1_4/utils.py rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/jellyfin/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/jellyfin/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/jellyseerr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/jellyseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/jellyseerr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/jenkins/templates/library/base_v1_1_4/utils.py rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/jenkins/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/jenkins/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/joplin/templates/library/base_v1_1_4/utils.py rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/joplin/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/joplin/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/kapowarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/kapowarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/kapowarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/kavita/templates/library/base_v1_1_4/utils.py rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/kavita/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/kavita/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/komga/templates/library/base_v1_1_4/utils.py rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/komga/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/komga/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/lidarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/lidarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/lidarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/linkding/templates/library/base_v1_1_4/utils.py rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/linkding/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/linkding/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/listmonk/templates/library/base_v1_1_4/utils.py rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/listmonk/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/listmonk/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/logseq/templates/library/base_v1_1_4/utils.py rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/logseq/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/logseq/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/mealie/templates/library/base_v1_1_4/utils.py rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/mealie/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/mealie/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/metube/templates/library/base_v1_1_4/utils.py rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/metube/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/metube/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/minecraft/templates/library/base_v1_1_4/utils.py rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/minecraft/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/minecraft/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/mineos/templates/library/base_v1_1_4/utils.py rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/mineos/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/mineos/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/mumble/templates/library/base_v1_1_4/utils.py rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/mumble/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/mumble/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/n8n/templates/library/base_v1_1_4/utils.py rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/n8n/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/n8n/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/navidrome/templates/library/base_v1_1_4/utils.py rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/navidrome/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/navidrome/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/netbootxyz/templates/library/base_v1_1_4/utils.py rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/netbootxyz/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/netbootxyz/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/nginx-proxy-manager/templates/library/base_v1_1_4/utils.py rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/nginx-proxy-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/nginx-proxy-manager/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/node-red/templates/library/base_v1_1_4/utils.py rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/node-red/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/node-red/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/odoo/templates/library/base_v1_1_4/utils.py rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/odoo/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/odoo/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/omada-controller/templates/library/base_v1_1_4/utils.py rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/omada-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/omada-controller/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/organizr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/organizr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/organizr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/overseerr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/overseerr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/overseerr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/palworld/templates/library/base_v1_1_4/utils.py rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/palworld/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/palworld/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/paperless-ngx/templates/library/base_v1_1_4/utils.py rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/paperless-ngx/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/paperless-ngx/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/passbolt/templates/library/base_v1_1_4/utils.py rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/passbolt/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/passbolt/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/pgadmin/templates/library/base_v1_1_4/utils.py rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/pgadmin/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/pgadmin/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/pigallery2/templates/library/base_v1_1_4/utils.py rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/pigallery2/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/pigallery2/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/piwigo/templates/library/base_v1_1_4/utils.py rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/piwigo/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/piwigo/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/planka/templates/library/base_v1_1_4/utils.py rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/planka/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/planka/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/plex-auto-languages/templates/library/base_v1_1_4/utils.py rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/plex-auto-languages/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/plex-auto-languages/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/portainer/templates/library/base_v1_1_4/utils.py rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/portainer/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/portainer/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/prowlarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/prowlarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/prowlarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/qbittorrent/templates/library/base_v1_1_4/utils.py rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/qbittorrent/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/qbittorrent/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/radarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/radarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/radarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/readarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/readarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/readarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/recyclarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/recyclarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/recyclarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/redis/templates/library/base_v1_1_4/utils.py rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/redis/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/redis/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/roundcube/templates/library/base_v1_1_4/utils.py rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/roundcube/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/roundcube/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/rsyncd/templates/library/base_v1_1_4/utils.py rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/rsyncd/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/rsyncd/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/rust-desk/templates/library/base_v1_1_4/utils.py rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/rust-desk/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/rust-desk/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/sabnzbd/templates/library/base_v1_1_4/utils.py rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/sabnzbd/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/sabnzbd/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/searxng/templates/library/base_v1_1_4/utils.py rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/searxng/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/searxng/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/sftpgo/templates/library/base_v1_1_4/utils.py rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/sftpgo/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/sftpgo/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/sonarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/sonarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/sonarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/tailscale/templates/library/base_v1_1_4/utils.py rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/tailscale/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/tailscale/templates/library/base_v1_1_5/utils.py rename ix-dev/community/tailscale/templates/library/community/tailscale/{v1_1_16 => v1_1_17}/util.py (93%) delete mode 100644 ix-dev/community/tautulli/templates/library/base_v1_1_4/utils.py rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/tautulli/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/tautulli/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/tdarr/templates/library/base_v1_1_4/utils.py rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/tdarr/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/tdarr/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/terraria/templates/library/base_v1_1_4/utils.py rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/terraria/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/terraria/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/tftpd-hpa/templates/library/base_v1_1_4/utils.py rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/tftpd-hpa/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/tftpd-hpa/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/tiny-media-manager/templates/library/base_v1_1_4/utils.py rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/tiny-media-manager/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/tiny-media-manager/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/transmission/templates/library/base_v1_1_4/utils.py rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/transmission/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/transmission/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/twofactor-auth/templates/library/base_v1_1_4/utils.py rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/twofactor-auth/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/twofactor-auth/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/unifi-controller/templates/library/base_v1_1_4/utils.py rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/unifi-controller/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/unifi-controller/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/unifi-protect-backup/templates/library/base_v1_1_4/utils.py rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/unifi-protect-backup/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/unifi-protect-backup/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/vaultwarden/templates/library/base_v1_1_4/utils.py rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/vaultwarden/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/vaultwarden/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/vikunja/templates/library/base_v1_1_4/utils.py rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/vikunja/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/vikunja/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/webdav/templates/library/base_v1_1_4/utils.py rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/webdav/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/webdav/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/whoogle/templates/library/base_v1_1_4/utils.py rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/whoogle/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/whoogle/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/wordpress/templates/library/base_v1_1_4/utils.py rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/wordpress/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/wordpress/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/community/zerotier/templates/library/base_v1_1_4/utils.py rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/community/zerotier/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/community/zerotier/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/enterprise/minio/templates/library/base_v1_1_4/utils.py rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/enterprise/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/enterprise/minio/templates/library/base_v1_1_5/utils.py rename ix-dev/enterprise/minio/templates/library/enterprise/minio/{v1_1_8 => v1_1_9}/__init__.py (100%) rename ix-dev/enterprise/minio/templates/library/enterprise/minio/{v1_1_8 => v1_1_9}/data.py (98%) delete mode 100644 ix-dev/enterprise/syncthing/templates/library/base_v1_1_4/utils.py rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/enterprise/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/enterprise/syncthing/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/collabora/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/collabora/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/collabora/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/diskoverdata/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/diskoverdata/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/diskoverdata/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/elastic-search/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/elastic-search/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/elastic-search/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/emby/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/emby/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/emby/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/home-assistant/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/home-assistant/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/home-assistant/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/ix-app/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/ix-app/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/ix-app/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/minio/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/minio/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/minio/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/netdata/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/netdata/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/netdata/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/photoprism/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/photoprism/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/photoprism/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/pihole/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/pihole/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/pihole/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/plex/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/plex/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/plex/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/prometheus/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/prometheus/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/prometheus/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/storj/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/storj/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/storj/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/syncthing/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/syncthing/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/syncthing/templates/library/base_v1_1_5/utils.py delete mode 100644 ix-dev/stable/wg-easy/templates/library/base_v1_1_4/utils.py rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/__init__.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/environment.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/healthchecks.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/mariadb.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/metadata.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/network.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/permissions.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/ports.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/postgres.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/redis.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/resources.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/security.py (100%) rename ix-dev/stable/wg-easy/templates/library/{base_v1_1_4 => base_v1_1_5}/storage.py (100%) create mode 100644 ix-dev/stable/wg-easy/templates/library/base_v1_1_5/utils.py diff --git a/ix-dev/community/actual-budget/app.yaml b/ix-dev/community/actual-budget/app.yaml index da8b9200ea..87ac898bb1 100644 --- a/ix-dev/community/actual-budget/app.yaml +++ b/ix-dev/community/actual-budget/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/actual-budget/icons/icon.png keywords: - finance - budget -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://hub.docker.com/r/actualbudget/actual-server title: Actual Budget train: community -version: 1.1.13 +version: 1.1.14 diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/__init__.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/__init__.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/__init__.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/__init__.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/environment.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/environment.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/environment.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/environment.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/healthchecks.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/healthchecks.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/healthchecks.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/healthchecks.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/mariadb.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/mariadb.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/mariadb.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/mariadb.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/metadata.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/metadata.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/metadata.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/metadata.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/network.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/network.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/network.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/network.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/permissions.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/permissions.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/permissions.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/permissions.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/ports.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/ports.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/ports.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/ports.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/postgres.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/postgres.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/postgres.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/postgres.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/redis.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/redis.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/redis.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/redis.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/resources.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/resources.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/resources.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/resources.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/security.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/security.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/security.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/security.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/storage.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/storage.py similarity index 100% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/storage.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/storage.py diff --git a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/utils.py b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/utils.py similarity index 77% rename from ix-dev/community/actual-budget/templates/library/base_v1_1_4/utils.py rename to ix-dev/community/actual-budget/templates/library/base_v1_1_5/utils.py index 3d76208ff1..8a7c0815c6 100644 --- a/ix-dev/community/actual-budget/templates/library/base_v1_1_4/utils.py +++ b/ix-dev/community/actual-budget/templates/library/base_v1_1_5/utils.py @@ -27,12 +27,8 @@ def basic_auth_header(username, password): return f"Basic {security.basic_auth(username, password)}" -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed +def bcrypt_hash(password): + return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") def match_regex(value, regex): @@ -88,9 +84,7 @@ def get_image(images={}, name=""): if name not in images: throw_error(f"Expected [images.{name}] to be set") if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) + throw_error(f"Expected [images.{name}.repository] and [images.{name}.tag] to be set") return f"{images[name]['repository']}:{images[name]['tag']}" @@ -109,13 +103,8 @@ def copy_dict(dict): return dict.copy() -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") def auto_cast(value): diff --git a/ix-dev/community/adguard-home/app.yaml b/ix-dev/community/adguard-home/app.yaml index d653369b6c..111805d264 100644 --- a/ix-dev/community/adguard-home/app.yaml +++ b/ix-dev/community/adguard-home/app.yaml @@ -18,8 +18,8 @@ icon: https://media.sys.truenas.net/apps/adguard-home/icons/icon.svg keywords: - dns - adblock -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -40,4 +40,4 @@ sources: - https://hub.docker.com/r/adguard/adguardhome title: AdGuard Home train: community -version: 1.0.22 +version: 1.0.23 diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/__init__.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/__init__.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/__init__.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/__init__.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/environment.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/environment.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/environment.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/environment.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/healthchecks.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/healthchecks.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/healthchecks.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/healthchecks.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/mariadb.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/mariadb.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/mariadb.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/mariadb.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/metadata.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/metadata.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/metadata.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/metadata.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/network.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/network.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/network.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/network.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/permissions.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/permissions.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/permissions.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/permissions.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/ports.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/ports.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/ports.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/ports.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/postgres.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/postgres.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/postgres.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/postgres.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/redis.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/redis.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/redis.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/redis.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/resources.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/resources.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/resources.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/resources.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/security.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/security.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/security.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/security.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/storage.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/storage.py similarity index 100% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/storage.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/storage.py diff --git a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/utils.py b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/utils.py similarity index 77% rename from ix-dev/community/adguard-home/templates/library/base_v1_1_4/utils.py rename to ix-dev/community/adguard-home/templates/library/base_v1_1_5/utils.py index 3d76208ff1..8a7c0815c6 100644 --- a/ix-dev/community/adguard-home/templates/library/base_v1_1_4/utils.py +++ b/ix-dev/community/adguard-home/templates/library/base_v1_1_5/utils.py @@ -27,12 +27,8 @@ def basic_auth_header(username, password): return f"Basic {security.basic_auth(username, password)}" -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed +def bcrypt_hash(password): + return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") def match_regex(value, regex): @@ -88,9 +84,7 @@ def get_image(images={}, name=""): if name not in images: throw_error(f"Expected [images.{name}] to be set") if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) + throw_error(f"Expected [images.{name}.repository] and [images.{name}.tag] to be set") return f"{images[name]['repository']}:{images[name]['tag']}" @@ -109,13 +103,8 @@ def copy_dict(dict): return dict.copy() -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") def auto_cast(value): diff --git a/ix-dev/community/audiobookshelf/app.yaml b/ix-dev/community/audiobookshelf/app.yaml index 3a81977f1e..09d3478c93 100644 --- a/ix-dev/community/audiobookshelf/app.yaml +++ b/ix-dev/community/audiobookshelf/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/audiobookshelf/icons/icon.svg keywords: - media - audiobook -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://github.com/advplyr/audiobookshelf title: Audiobookshelf train: community -version: 1.2.17 +version: 1.2.18 diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/__init__.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/__init__.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/__init__.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/__init__.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/environment.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/environment.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/environment.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/environment.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/healthchecks.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/healthchecks.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/healthchecks.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/healthchecks.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/mariadb.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/mariadb.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/mariadb.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/mariadb.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/metadata.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/metadata.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/metadata.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/metadata.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/network.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/network.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/network.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/network.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/permissions.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/permissions.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/permissions.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/permissions.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/ports.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/ports.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/ports.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/ports.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/postgres.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/postgres.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/postgres.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/postgres.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/redis.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/redis.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/redis.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/redis.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/resources.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/resources.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/resources.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/resources.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/security.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/security.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/security.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/security.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/storage.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/storage.py similarity index 100% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/storage.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/storage.py diff --git a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/utils.py b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/utils.py similarity index 77% rename from ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/utils.py rename to ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/utils.py index 3d76208ff1..8a7c0815c6 100644 --- a/ix-dev/community/audiobookshelf/templates/library/base_v1_1_4/utils.py +++ b/ix-dev/community/audiobookshelf/templates/library/base_v1_1_5/utils.py @@ -27,12 +27,8 @@ def basic_auth_header(username, password): return f"Basic {security.basic_auth(username, password)}" -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed +def bcrypt_hash(password): + return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") def match_regex(value, regex): @@ -88,9 +84,7 @@ def get_image(images={}, name=""): if name not in images: throw_error(f"Expected [images.{name}] to be set") if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) + throw_error(f"Expected [images.{name}.repository] and [images.{name}.tag] to be set") return f"{images[name]['repository']}:{images[name]['tag']}" @@ -109,13 +103,8 @@ def copy_dict(dict): return dict.copy() -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") def auto_cast(value): diff --git a/ix-dev/community/autobrr/app.yaml b/ix-dev/community/autobrr/app.yaml index 40cf61b182..07fe9cc053 100644 --- a/ix-dev/community/autobrr/app.yaml +++ b/ix-dev/community/autobrr/app.yaml @@ -10,8 +10,8 @@ keywords: - media - torrent - usenet -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/autobrr/autobrr title: Autobrr train: community -version: 1.1.15 +version: 1.1.16 diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/__init__.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/__init__.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/__init__.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/__init__.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/environment.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/environment.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/environment.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/environment.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/healthchecks.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/healthchecks.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/healthchecks.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/healthchecks.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/mariadb.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/mariadb.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/mariadb.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/mariadb.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/metadata.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/metadata.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/metadata.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/metadata.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/network.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/network.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/network.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/network.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/permissions.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/permissions.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/permissions.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/permissions.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/ports.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/ports.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/ports.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/ports.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/postgres.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/postgres.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/postgres.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/postgres.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/redis.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/redis.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/redis.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/redis.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/resources.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/resources.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/resources.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/resources.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/security.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/security.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/security.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/security.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/storage.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/storage.py similarity index 100% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/storage.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/storage.py diff --git a/ix-dev/community/autobrr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/autobrr/templates/library/base_v1_1_5/utils.py similarity index 77% rename from ix-dev/community/autobrr/templates/library/base_v1_1_4/utils.py rename to ix-dev/community/autobrr/templates/library/base_v1_1_5/utils.py index 3d76208ff1..8a7c0815c6 100644 --- a/ix-dev/community/autobrr/templates/library/base_v1_1_4/utils.py +++ b/ix-dev/community/autobrr/templates/library/base_v1_1_5/utils.py @@ -27,12 +27,8 @@ def basic_auth_header(username, password): return f"Basic {security.basic_auth(username, password)}" -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed +def bcrypt_hash(password): + return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") def match_regex(value, regex): @@ -88,9 +84,7 @@ def get_image(images={}, name=""): if name not in images: throw_error(f"Expected [images.{name}] to be set") if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) + throw_error(f"Expected [images.{name}.repository] and [images.{name}.tag] to be set") return f"{images[name]['repository']}:{images[name]['tag']}" @@ -109,13 +103,8 @@ def copy_dict(dict): return dict.copy() -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") def auto_cast(value): diff --git a/ix-dev/community/bazarr/app.yaml b/ix-dev/community/bazarr/app.yaml index 4722d7f18c..d30bb969d2 100644 --- a/ix-dev/community/bazarr/app.yaml +++ b/ix-dev/community/bazarr/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/bazarr/icons/icon.png keywords: - media - subtitles -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/morpheus65535/bazarr title: Bazarr train: community -version: 1.0.22 +version: 1.0.23 diff --git a/ix-dev/community/bazarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/bazarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/bazarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/briefkasten/app.yaml b/ix-dev/community/briefkasten/app.yaml index f53301049c..d7404a37df 100644 --- a/ix-dev/community/briefkasten/app.yaml +++ b/ix-dev/community/briefkasten/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/briefkasten/icons/icon.svg keywords: - bookmark -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -35,4 +35,4 @@ sources: - https://docs.briefkastenhq.com/ title: Briefkasten train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/briefkasten/templates/library/base_v1_1_4/utils.py b/ix-dev/community/briefkasten/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/briefkasten/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/castopod/app.yaml b/ix-dev/community/castopod/app.yaml index ca8776ebfb..b43abc87b1 100644 --- a/ix-dev/community/castopod/app.yaml +++ b/ix-dev/community/castopod/app.yaml @@ -19,8 +19,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/castopod/icons/icon.svg keywords: - podcast -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -49,4 +49,4 @@ sources: - https://code.castopod.org/adaures/castopod title: Castopod train: community -version: 1.0.12 +version: 1.0.13 diff --git a/ix-dev/community/castopod/templates/library/base_v1_1_4/utils.py b/ix-dev/community/castopod/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/castopod/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/chia/app.yaml b/ix-dev/community/chia/app.yaml index 78b763a9a2..3eb62cc368 100644 --- a/ix-dev/community/chia/app.yaml +++ b/ix-dev/community/chia/app.yaml @@ -11,8 +11,8 @@ keywords: - blockchain - hard-drive - chia -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://www.chia.net/ title: Chia train: community -version: 1.0.16 +version: 1.0.17 diff --git a/ix-dev/community/chia/templates/library/base_v1_1_4/utils.py b/ix-dev/community/chia/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/chia/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/clamav/app.yaml b/ix-dev/community/clamav/app.yaml index 3aa0d9ea1c..af3658ebed 100644 --- a/ix-dev/community/clamav/app.yaml +++ b/ix-dev/community/clamav/app.yaml @@ -19,8 +19,8 @@ icon: https://media.sys.truenas.net/apps/clamav/icons/icon.png keywords: - anti-virus - clamav -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -38,4 +38,4 @@ sources: - https://www.clamav.net/ title: ClamAV train: community -version: 1.1.10 +version: 1.1.11 diff --git a/ix-dev/community/clamav/templates/library/base_v1_1_4/utils.py b/ix-dev/community/clamav/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/clamav/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/cloudflared/app.yaml b/ix-dev/community/cloudflared/app.yaml index ed9ed9272b..652f61d83f 100644 --- a/ix-dev/community/cloudflared/app.yaml +++ b/ix-dev/community/cloudflared/app.yaml @@ -11,8 +11,8 @@ keywords: - network - cloudflare - tunnel -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://hub.docker.com/r/cloudflare/cloudflared title: Cloudflared train: community -version: 1.1.14 +version: 1.1.15 diff --git a/ix-dev/community/cloudflared/templates/library/base_v1_1_4/utils.py b/ix-dev/community/cloudflared/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/cloudflared/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/dashy/app.yaml b/ix-dev/community/dashy/app.yaml index 80164b5ebc..2d0ad32cd7 100644 --- a/ix-dev/community/dashy/app.yaml +++ b/ix-dev/community/dashy/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/dashy/icons/icon.png keywords: - dashboard -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -29,4 +29,4 @@ sources: - https://github.com/lissy93/dashy title: Dashy train: community -version: 1.0.18 +version: 1.0.19 diff --git a/ix-dev/community/dashy/templates/library/base_v1_1_4/utils.py b/ix-dev/community/dashy/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/dashy/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/ddns-updater/app.yaml b/ix-dev/community/ddns-updater/app.yaml index ebac6cf5f5..235e4743bb 100644 --- a/ix-dev/community/ddns-updater/app.yaml +++ b/ix-dev/community/ddns-updater/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/ddns-updater/icons/icon.svg keywords: - ddns-updater - ddns -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://hub.docker.com/r/qmcgaw/ddns-updater title: DDNS Updater train: community -version: 1.0.24 +version: 1.0.25 diff --git a/ix-dev/community/ddns-updater/templates/library/base_v1_1_4/utils.py b/ix-dev/community/ddns-updater/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/ddns-updater/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_24/__init__.py b/ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_25/__init__.py similarity index 100% rename from ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_24/__init__.py rename to ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_25/__init__.py diff --git a/ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_24/config.py b/ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_25/config.py similarity index 99% rename from ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_24/config.py rename to ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_25/config.py index 920ddc1042..5f5a3a58ab 100644 --- a/ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_24/config.py +++ b/ix-dev/community/ddns-updater/templates/library/community/ddns-updater/v1_0_25/config.py @@ -1,4 +1,4 @@ -from base_v1_1_4 import utils +from base_v1_1_5 import utils import json valid_ip_dns_providers = [ diff --git a/ix-dev/community/deluge/app.yaml b/ix-dev/community/deluge/app.yaml index e8d2a2d50a..a991ece30c 100644 --- a/ix-dev/community/deluge/app.yaml +++ b/ix-dev/community/deluge/app.yaml @@ -19,8 +19,8 @@ icon: https://media.sys.truenas.net/apps/deluge/icons/icon.png keywords: - torrent - download -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -38,4 +38,4 @@ sources: - https://deluge-torrent.org/ title: Deluge train: community -version: 1.0.18 +version: 1.0.19 diff --git a/ix-dev/community/deluge/templates/library/base_v1_1_4/utils.py b/ix-dev/community/deluge/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/deluge/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/distribution/app.yaml b/ix-dev/community/distribution/app.yaml index 2fd511a576..1b5a040508 100644 --- a/ix-dev/community/distribution/app.yaml +++ b/ix-dev/community/distribution/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/distribution/icons/icon.svg keywords: - registry - container -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://github.com/distribution/distribution title: Distribution train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/distribution/templates/library/base_v1_1_4/utils.py b/ix-dev/community/distribution/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/distribution/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/dockge/app.yaml b/ix-dev/community/dockge/app.yaml index 61008a66d0..babd5f3a26 100644 --- a/ix-dev/community/dockge/app.yaml +++ b/ix-dev/community/dockge/app.yaml @@ -28,8 +28,8 @@ icon: https://media.sys.truenas.net/apps/dockge/icons/icon.svg keywords: - docker - compose -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -48,4 +48,4 @@ sources: - https://github.com/louislam/dockge title: Dockge train: community -version: 1.0.17 +version: 1.0.18 diff --git a/ix-dev/community/dockge/templates/library/base_v1_1_4/utils.py b/ix-dev/community/dockge/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/dockge/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/drawio/app.yaml b/ix-dev/community/drawio/app.yaml index f5e6766a57..c7eed1da9b 100644 --- a/ix-dev/community/drawio/app.yaml +++ b/ix-dev/community/drawio/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/drawio/icons/icon.png keywords: - diagram - whiteboard -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -32,4 +32,4 @@ sources: - https://github.com/jgraph/drawio title: Draw.io train: community -version: 1.1.11 +version: 1.1.12 diff --git a/ix-dev/community/drawio/templates/library/base_v1_1_4/utils.py b/ix-dev/community/drawio/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/drawio/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/filebrowser/app.yaml b/ix-dev/community/filebrowser/app.yaml index 5a2d3dcb63..df75dcef79 100644 --- a/ix-dev/community/filebrowser/app.yaml +++ b/ix-dev/community/filebrowser/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/filebrowser/icons/icon.png keywords: - files - browser -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://hub.docker.com/r/filebrowser/filebrowser title: File Browser train: community -version: 1.1.12 +version: 1.1.13 diff --git a/ix-dev/community/filebrowser/templates/library/base_v1_1_4/utils.py b/ix-dev/community/filebrowser/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/filebrowser/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/firefly-iii/app.yaml b/ix-dev/community/firefly-iii/app.yaml index 4a99c0bc62..7b37862783 100644 --- a/ix-dev/community/firefly-iii/app.yaml +++ b/ix-dev/community/firefly-iii/app.yaml @@ -19,8 +19,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/firefly-iii/icons/icon.png keywords: - finance -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -57,4 +57,4 @@ sources: - https://github.com/firefly-iii/firefly-iii title: Firefly III train: community -version: 1.2.19 +version: 1.2.20 diff --git a/ix-dev/community/firefly-iii/templates/library/base_v1_1_4/utils.py b/ix-dev/community/firefly-iii/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/firefly-iii/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/flame/app.yaml b/ix-dev/community/flame/app.yaml index 4230912971..5fe4923d42 100644 --- a/ix-dev/community/flame/app.yaml +++ b/ix-dev/community/flame/app.yaml @@ -14,8 +14,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/flame/icons/icon.png keywords: - startpage -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -34,4 +34,4 @@ sources: - https://github.com/pawelmalak/flame title: Flame train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/flame/templates/library/base_v1_1_4/utils.py b/ix-dev/community/flame/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/flame/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/freshrss/app.yaml b/ix-dev/community/freshrss/app.yaml index c353f99fe2..db47aa0e64 100644 --- a/ix-dev/community/freshrss/app.yaml +++ b/ix-dev/community/freshrss/app.yaml @@ -15,8 +15,8 @@ icon: https://media.sys.truenas.net/apps/freshrss/icons/icon.png keywords: - rss - news -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -41,4 +41,4 @@ sources: - https://hub.docker.com/r/freshrss/freshrss title: FreshRSS train: community -version: 1.1.14 +version: 1.1.15 diff --git a/ix-dev/community/freshrss/templates/library/base_v1_1_4/utils.py b/ix-dev/community/freshrss/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/freshrss/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/frigate/app.yaml b/ix-dev/community/frigate/app.yaml index 3d35b79283..1552d97462 100644 --- a/ix-dev/community/frigate/app.yaml +++ b/ix-dev/community/frigate/app.yaml @@ -19,8 +19,8 @@ icon: https://media.sys.truenas.net/apps/frigate/icons/icon.svg keywords: - camera - nvr -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -40,4 +40,4 @@ sources: - https://github.com/blakeblackshear/frigate title: Frigate train: community -version: 1.0.9 +version: 1.0.10 diff --git a/ix-dev/community/frigate/templates/library/base_v1_1_4/utils.py b/ix-dev/community/frigate/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/frigate/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/fscrawler/app.yaml b/ix-dev/community/fscrawler/app.yaml index d8c9ad3d68..d88b1340ab 100644 --- a/ix-dev/community/fscrawler/app.yaml +++ b/ix-dev/community/fscrawler/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/fscrawler/icons/icon.svg keywords: - index - crawler -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://fscrawler.readthedocs.io/ title: FSCrawler train: community -version: 1.0.17 +version: 1.0.18 diff --git a/ix-dev/community/fscrawler/templates/library/base_v1_1_4/utils.py b/ix-dev/community/fscrawler/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/fscrawler/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/gitea/app.yaml b/ix-dev/community/gitea/app.yaml index 8a4d27438a..98d62a727a 100644 --- a/ix-dev/community/gitea/app.yaml +++ b/ix-dev/community/gitea/app.yaml @@ -10,8 +10,8 @@ keywords: - git - gitea - source control -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://docs.gitea.io/en-us/install-with-docker-rootless title: Gitea train: community -version: 1.0.12 +version: 1.0.13 diff --git a/ix-dev/community/gitea/templates/library/base_v1_1_4/utils.py b/ix-dev/community/gitea/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/gitea/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/grafana/app.yaml b/ix-dev/community/grafana/app.yaml index 88daab6f7a..99c67c8ad1 100644 --- a/ix-dev/community/grafana/app.yaml +++ b/ix-dev/community/grafana/app.yaml @@ -12,8 +12,8 @@ keywords: - monitoring - metrics - dashboards -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -34,4 +34,4 @@ sources: - https://github.com/grafana title: Grafana train: community -version: 1.1.13 +version: 1.1.14 diff --git a/ix-dev/community/grafana/templates/library/base_v1_1_4/utils.py b/ix-dev/community/grafana/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/grafana/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/handbrake/app.yaml b/ix-dev/community/handbrake/app.yaml index d0b6188429..fccda35dc7 100644 --- a/ix-dev/community/handbrake/app.yaml +++ b/ix-dev/community/handbrake/app.yaml @@ -28,8 +28,8 @@ keywords: - media - video - transcoder -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -47,4 +47,4 @@ sources: - https://hub.docker.com/r/jlesage/handbrake title: Handbrake train: community -version: 2.0.12 +version: 2.0.13 diff --git a/ix-dev/community/handbrake/templates/library/base_v1_1_4/utils.py b/ix-dev/community/handbrake/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/handbrake/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/homarr/app.yaml b/ix-dev/community/homarr/app.yaml index be5aecf230..faa481710c 100644 --- a/ix-dev/community/homarr/app.yaml +++ b/ix-dev/community/homarr/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/homarr/icons/icon.svg keywords: - dashboard -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/ajnart/homarr title: Homarr train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/homarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/homarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/homarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/homepage/app.yaml b/ix-dev/community/homepage/app.yaml index 7504723007..1561f8f940 100644 --- a/ix-dev/community/homepage/app.yaml +++ b/ix-dev/community/homepage/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/homepage/icons/icon.png keywords: - dashboard -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://github.com/benphelps/homepage title: Homepage train: community -version: 1.0.23 +version: 1.0.24 diff --git a/ix-dev/community/homepage/templates/library/base_v1_1_4/utils.py b/ix-dev/community/homepage/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/homepage/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/homer/app.yaml b/ix-dev/community/homer/app.yaml index a1af2854af..f674dc6740 100644 --- a/ix-dev/community/homer/app.yaml +++ b/ix-dev/community/homer/app.yaml @@ -7,8 +7,8 @@ description: Homer is a dead simple static HOMepage for your servER to keep your home: https://github.com/bastienwirtz/homer host_mounts: [] icon: https://media.sys.truenas.net/apps/homer/icons/icon.png -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ tags: - homepage title: Homer train: community -version: 2.0.12 +version: 2.0.13 diff --git a/ix-dev/community/homer/templates/library/base_v1_1_4/utils.py b/ix-dev/community/homer/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/homer/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/immich/app.yaml b/ix-dev/community/immich/app.yaml index 8618963311..3ab7018551 100644 --- a/ix-dev/community/immich/app.yaml +++ b/ix-dev/community/immich/app.yaml @@ -16,8 +16,8 @@ icon: https://media.sys.truenas.net/apps/immich/icons/icon.svg keywords: - photos - backup -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -45,4 +45,4 @@ sources: - https://github.com/immich-app/immich title: Immich train: community -version: 1.6.24 +version: 1.6.25 diff --git a/ix-dev/community/immich/templates/library/base_v1_1_4/utils.py b/ix-dev/community/immich/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/immich/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/invidious/app.yaml b/ix-dev/community/invidious/app.yaml index 0d9f2e3cbc..fa7e1f23c2 100644 --- a/ix-dev/community/invidious/app.yaml +++ b/ix-dev/community/invidious/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/invidious/icons/icon.svg keywords: - youtube -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -38,4 +38,4 @@ sources: - https://quay.io/repository/invidious title: Invidious train: community -version: 1.0.11 +version: 1.0.12 diff --git a/ix-dev/community/invidious/templates/library/base_v1_1_4/utils.py b/ix-dev/community/invidious/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/invidious/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/ipfs/app.yaml b/ix-dev/community/ipfs/app.yaml index 2cacf1cff5..06e1b9bc4d 100644 --- a/ix-dev/community/ipfs/app.yaml +++ b/ix-dev/community/ipfs/app.yaml @@ -12,8 +12,8 @@ keywords: - ipfs - file-sharing - kubo -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://ipfs.tech/ title: IPFS train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/ipfs/templates/library/base_v1_1_4/utils.py b/ix-dev/community/ipfs/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/ipfs/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/jellyfin/app.yaml b/ix-dev/community/jellyfin/app.yaml index ca976bae0e..0cf27b4bcc 100644 --- a/ix-dev/community/jellyfin/app.yaml +++ b/ix-dev/community/jellyfin/app.yaml @@ -14,8 +14,8 @@ keywords: - tv - media - streaming -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -35,4 +35,4 @@ sources: - https://jellyfin.org/ title: Jellyfin train: community -version: 1.0.27 +version: 1.0.28 diff --git a/ix-dev/community/jellyfin/templates/library/base_v1_1_4/utils.py b/ix-dev/community/jellyfin/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/jellyfin/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/jellyseerr/app.yaml b/ix-dev/community/jellyseerr/app.yaml index 00baab02d8..ac769eee43 100644 --- a/ix-dev/community/jellyseerr/app.yaml +++ b/ix-dev/community/jellyseerr/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/jellyseerr/icons/icon.svg keywords: - media -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -29,4 +29,4 @@ sources: - https://hub.docker.com/r/fallenbagel/jellyseerr title: Jellyseerr train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/jellyseerr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/jellyseerr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/jellyseerr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/jenkins/app.yaml b/ix-dev/community/jenkins/app.yaml index 8646058047..fffd00ef54 100644 --- a/ix-dev/community/jenkins/app.yaml +++ b/ix-dev/community/jenkins/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/jenkins/icons/icon.svg keywords: - automation - ci/cd -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://www.jenkins.io/ title: Jenkins train: community -version: 1.0.13 +version: 1.0.14 diff --git a/ix-dev/community/jenkins/templates/library/base_v1_1_4/utils.py b/ix-dev/community/jenkins/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/jenkins/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/joplin/app.yaml b/ix-dev/community/joplin/app.yaml index d3b97736ca..9c88366688 100644 --- a/ix-dev/community/joplin/app.yaml +++ b/ix-dev/community/joplin/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/joplin/icons/icon.png keywords: - notes -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -36,4 +36,4 @@ sources: - https://hub.docker.com/r/joplin/server/ title: Joplin train: community -version: 1.1.12 +version: 1.1.13 diff --git a/ix-dev/community/joplin/templates/library/base_v1_1_4/utils.py b/ix-dev/community/joplin/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/joplin/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/kapowarr/app.yaml b/ix-dev/community/kapowarr/app.yaml index bbeb5c3bc4..991695adda 100644 --- a/ix-dev/community/kapowarr/app.yaml +++ b/ix-dev/community/kapowarr/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/kapowarr/icons/icon.svg keywords: - comic - media -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/Casvt/Kapowarr title: Kapowarr train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/kapowarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/kapowarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/kapowarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/kavita/app.yaml b/ix-dev/community/kavita/app.yaml index 74660b2d72..0f2cc96db5 100644 --- a/ix-dev/community/kavita/app.yaml +++ b/ix-dev/community/kavita/app.yaml @@ -20,8 +20,8 @@ icon: https://media.sys.truenas.net/apps/kavita/icons/icon.png keywords: - ebook - manga -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -44,4 +44,4 @@ sources: - https://www.kavitareader.com title: Kavita train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/kavita/templates/library/base_v1_1_4/utils.py b/ix-dev/community/kavita/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/kavita/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/komga/app.yaml b/ix-dev/community/komga/app.yaml index 1972899fda..c8b405edc8 100644 --- a/ix-dev/community/komga/app.yaml +++ b/ix-dev/community/komga/app.yaml @@ -10,8 +10,8 @@ keywords: - media - comics - mangas -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://hub.docker.com/r/gotson/komga title: Komga train: community -version: 1.1.14 +version: 1.1.15 diff --git a/ix-dev/community/komga/templates/library/base_v1_1_4/utils.py b/ix-dev/community/komga/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/komga/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/lidarr/app.yaml b/ix-dev/community/lidarr/app.yaml index dbcbb96cff..9e0988421d 100644 --- a/ix-dev/community/lidarr/app.yaml +++ b/ix-dev/community/lidarr/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/lidarr/icons/icon.png keywords: - media - music -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/Lidarr/Lidarr title: Lidarr train: community -version: 1.1.14 +version: 1.1.15 diff --git a/ix-dev/community/lidarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/lidarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/lidarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/linkding/app.yaml b/ix-dev/community/linkding/app.yaml index e415d65cec..b2d4c2aa44 100644 --- a/ix-dev/community/linkding/app.yaml +++ b/ix-dev/community/linkding/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/linkding/icons/icon.svg keywords: - bookmark -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://hub.docker.com/r/sissbruecker/linkding/ title: Linkding train: community -version: 1.0.17 +version: 1.0.18 diff --git a/ix-dev/community/linkding/templates/library/base_v1_1_4/utils.py b/ix-dev/community/linkding/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/linkding/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/listmonk/app.yaml b/ix-dev/community/listmonk/app.yaml index 79340e5c2d..5bc78bd302 100644 --- a/ix-dev/community/listmonk/app.yaml +++ b/ix-dev/community/listmonk/app.yaml @@ -1,5 +1,5 @@ app_version: v4.0.1 -capabilities: +capabilities: - description: Listmonk is able to chown files. name: CHOWN - description: Listmonk is able to bypass permission checks. @@ -19,8 +19,8 @@ icon: https://media.sys.truenas.net/apps/listmonk/icons/icon.svg keywords: - mailing-list - newsletter -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -46,4 +46,4 @@ sources: - https://github.com/knadh/listmonk title: Listmonk train: community -version: 1.0.10 +version: 1.0.11 diff --git a/ix-dev/community/listmonk/templates/library/base_v1_1_4/utils.py b/ix-dev/community/listmonk/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/listmonk/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/logseq/app.yaml b/ix-dev/community/logseq/app.yaml index 2109854e47..28fe6ed379 100644 --- a/ix-dev/community/logseq/app.yaml +++ b/ix-dev/community/logseq/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/logseq/icons/icon.png keywords: - knowledge - management -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -28,4 +28,4 @@ sources: - https://github.com/logseq/logseq title: Logseq train: community -version: 1.0.18 +version: 1.0.19 diff --git a/ix-dev/community/logseq/templates/library/base_v1_1_4/utils.py b/ix-dev/community/logseq/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/logseq/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/mealie/app.yaml b/ix-dev/community/mealie/app.yaml index 653a785318..b40f9293a9 100644 --- a/ix-dev/community/mealie/app.yaml +++ b/ix-dev/community/mealie/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/mealie/icons/icon.png keywords: - recipes - meal planner -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://docs.mealie.io/ title: Mealie train: community -version: 1.2.12 +version: 1.2.13 diff --git a/ix-dev/community/mealie/templates/library/base_v1_1_4/utils.py b/ix-dev/community/mealie/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/mealie/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/metube/app.yaml b/ix-dev/community/metube/app.yaml index a1e495597f..cd4effa4d8 100644 --- a/ix-dev/community/metube/app.yaml +++ b/ix-dev/community/metube/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/metube/icons/icon.svg keywords: - youtube-dl - yt-dlp -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://github.com/alexta69/metube title: MeTube train: community -version: 1.1.18 +version: 1.1.19 diff --git a/ix-dev/community/metube/templates/library/base_v1_1_4/utils.py b/ix-dev/community/metube/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/metube/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/minecraft/app.yaml b/ix-dev/community/minecraft/app.yaml index bff256672b..d6f7c57719 100644 --- a/ix-dev/community/minecraft/app.yaml +++ b/ix-dev/community/minecraft/app.yaml @@ -19,8 +19,8 @@ icon: https://media.sys.truenas.net/apps/minecraft/icons/icon.svg keywords: - world - building -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -38,4 +38,4 @@ sources: - https://github.com/itzg/docker-minecraft-server title: Minecraft train: community -version: 1.11.19 +version: 1.11.20 diff --git a/ix-dev/community/minecraft/templates/library/base_v1_1_4/utils.py b/ix-dev/community/minecraft/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/minecraft/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/mineos/app.yaml b/ix-dev/community/mineos/app.yaml index 55f7151289..1c99c05421 100644 --- a/ix-dev/community/mineos/app.yaml +++ b/ix-dev/community/mineos/app.yaml @@ -19,8 +19,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/mineos/icons/icon.png keywords: - minecraft -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -39,4 +39,4 @@ sources: - https://github.com/hexparrot/mineos-node title: MineOS train: community -version: 1.0.18 +version: 1.0.19 diff --git a/ix-dev/community/mineos/templates/library/base_v1_1_4/utils.py b/ix-dev/community/mineos/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/mineos/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/mumble/app.yaml b/ix-dev/community/mumble/app.yaml index e5d1d2b758..5e5bd01c88 100644 --- a/ix-dev/community/mumble/app.yaml +++ b/ix-dev/community/mumble/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/mumble/icons/icon.svg keywords: - voice -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -27,4 +27,4 @@ sources: - https://www.mumble.info/ title: Mumble train: community -version: 1.1.10 +version: 1.1.11 diff --git a/ix-dev/community/mumble/templates/library/base_v1_1_4/utils.py b/ix-dev/community/mumble/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/mumble/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/n8n/app.yaml b/ix-dev/community/n8n/app.yaml index 7f0484fcc0..72e08c3307 100644 --- a/ix-dev/community/n8n/app.yaml +++ b/ix-dev/community/n8n/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/n8n/icons/icon.png keywords: - workflows - automation -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -42,4 +42,4 @@ sources: - https://hub.docker.com/r/n8nio/n8n title: n8n train: community -version: 1.3.27 +version: 1.3.28 diff --git a/ix-dev/community/n8n/templates/library/base_v1_1_4/utils.py b/ix-dev/community/n8n/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/n8n/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/navidrome/app.yaml b/ix-dev/community/navidrome/app.yaml index d392cfe844..d4f745e55f 100644 --- a/ix-dev/community/navidrome/app.yaml +++ b/ix-dev/community/navidrome/app.yaml @@ -11,8 +11,8 @@ icon: https://media.sys.truenas.net/apps/navidrome/icons/icon.png keywords: - media - music -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -32,4 +32,4 @@ sources: - https://github.com/navidrome/navidrome/ title: Navidrome train: community -version: 1.0.24 +version: 1.0.25 diff --git a/ix-dev/community/navidrome/templates/library/base_v1_1_4/utils.py b/ix-dev/community/navidrome/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/navidrome/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/netbootxyz/app.yaml b/ix-dev/community/netbootxyz/app.yaml index 0b5a998977..915e51b1c7 100644 --- a/ix-dev/community/netbootxyz/app.yaml +++ b/ix-dev/community/netbootxyz/app.yaml @@ -30,8 +30,8 @@ keywords: - netboot - netbootxyz - netboot.xyz -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -50,4 +50,4 @@ sources: - https://netboot.xyz title: Netboot.xyz train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/netbootxyz/templates/library/base_v1_1_4/utils.py b/ix-dev/community/netbootxyz/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/netbootxyz/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/nginx-proxy-manager/app.yaml b/ix-dev/community/nginx-proxy-manager/app.yaml index aeb8c52289..49e95189d5 100644 --- a/ix-dev/community/nginx-proxy-manager/app.yaml +++ b/ix-dev/community/nginx-proxy-manager/app.yaml @@ -22,8 +22,8 @@ keywords: - reverse - nginx - proxy -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -44,4 +44,4 @@ sources: - https://hub.docker.com/r/jc21/nginx-proxy-manager title: Nginx Proxy Manager train: community -version: 1.0.24 +version: 1.0.25 diff --git a/ix-dev/community/nginx-proxy-manager/templates/library/base_v1_1_4/utils.py b/ix-dev/community/nginx-proxy-manager/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/nginx-proxy-manager/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/node-red/app.yaml b/ix-dev/community/node-red/app.yaml index ccc684f257..45912d9dab 100644 --- a/ix-dev/community/node-red/app.yaml +++ b/ix-dev/community/node-red/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/node-red/icons/icon.png keywords: - automation -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -29,4 +29,4 @@ sources: - https://github.com/node-red/node-red-docker title: Node-RED train: community -version: 1.0.33 +version: 1.0.34 diff --git a/ix-dev/community/node-red/templates/library/base_v1_1_4/utils.py b/ix-dev/community/node-red/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/node-red/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/odoo/app.yaml b/ix-dev/community/odoo/app.yaml index 463d682ee1..ee66caa6d8 100644 --- a/ix-dev/community/odoo/app.yaml +++ b/ix-dev/community/odoo/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/odoo/icons/icon.png keywords: - erp - odoo -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://github.com/odoo/odoo title: Odoo train: community -version: 1.0.4 +version: 1.0.5 diff --git a/ix-dev/community/odoo/templates/library/base_v1_1_4/utils.py b/ix-dev/community/odoo/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/odoo/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/omada-controller/app.yaml b/ix-dev/community/omada-controller/app.yaml index 333b9845fe..9fd4fa978e 100644 --- a/ix-dev/community/omada-controller/app.yaml +++ b/ix-dev/community/omada-controller/app.yaml @@ -23,8 +23,8 @@ keywords: - controller - omada - tp-link -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -42,4 +42,4 @@ sources: - https://hub.docker.com/r/mbentley/omada-controller title: Omada Controller train: community -version: 1.1.11 +version: 1.1.12 diff --git a/ix-dev/community/omada-controller/templates/library/base_v1_1_4/utils.py b/ix-dev/community/omada-controller/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/omada-controller/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/organizr/app.yaml b/ix-dev/community/organizr/app.yaml index 37534684c7..a977981727 100644 --- a/ix-dev/community/organizr/app.yaml +++ b/ix-dev/community/organizr/app.yaml @@ -19,8 +19,8 @@ icon: https://media.sys.truenas.net/apps/organizr/icons/icon.png keywords: - dashboard - organizr -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -40,4 +40,4 @@ sources: - https://github.com/causefx/Organizr title: Organizr train: community -version: 1.0.18 +version: 1.0.19 diff --git a/ix-dev/community/organizr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/organizr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/organizr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/overseerr/app.yaml b/ix-dev/community/overseerr/app.yaml index 97fc6d8a0c..b0a9873d72 100644 --- a/ix-dev/community/overseerr/app.yaml +++ b/ix-dev/community/overseerr/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/overseerr/icons/icon.svg keywords: - media -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -28,4 +28,4 @@ sources: - https://github.com/sct/overseerr title: Overseerr train: community -version: 1.0.18 +version: 1.0.19 diff --git a/ix-dev/community/overseerr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/overseerr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/overseerr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/palworld/app.yaml b/ix-dev/community/palworld/app.yaml index a63c29ec0b..91d0c85a16 100644 --- a/ix-dev/community/palworld/app.yaml +++ b/ix-dev/community/palworld/app.yaml @@ -28,8 +28,8 @@ icon: https://media.sys.truenas.net/apps/palworld/icons/icon.webp keywords: - game - palworld -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -47,4 +47,4 @@ sources: - https://github.com/ich777/docker-steamcmd-server/tree/palworld title: Palworld train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/palworld/templates/library/base_v1_1_4/utils.py b/ix-dev/community/palworld/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/palworld/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/paperless-ngx/app.yaml b/ix-dev/community/paperless-ngx/app.yaml index 63c0e82632..156c70a607 100644 --- a/ix-dev/community/paperless-ngx/app.yaml +++ b/ix-dev/community/paperless-ngx/app.yaml @@ -20,8 +20,8 @@ icon: https://media.sys.truenas.net/apps/paperless-ngx/icons/icon.svg keywords: - document - management -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -57,4 +57,4 @@ sources: - https://github.com/paperless-ngx/paperless-ngx title: Paperless-ngx train: community -version: 1.0.15 +version: 1.0.16 diff --git a/ix-dev/community/paperless-ngx/templates/library/base_v1_1_4/utils.py b/ix-dev/community/paperless-ngx/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/paperless-ngx/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/passbolt/app.yaml b/ix-dev/community/passbolt/app.yaml index d1369f6eec..0517f43d66 100644 --- a/ix-dev/community/passbolt/app.yaml +++ b/ix-dev/community/passbolt/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/passbolt/icons/icon.svg keywords: - password - manager -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -37,4 +37,4 @@ sources: - https://www.passbolt.com title: Passbolt train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/passbolt/templates/library/base_v1_1_4/utils.py b/ix-dev/community/passbolt/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/passbolt/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/pgadmin/app.yaml b/ix-dev/community/pgadmin/app.yaml index 91e254876c..7c7de55fa4 100644 --- a/ix-dev/community/pgadmin/app.yaml +++ b/ix-dev/community/pgadmin/app.yaml @@ -12,8 +12,8 @@ icon: https://media.sys.truenas.net/apps/pgadmin/icons/icon.png keywords: - database - management -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -34,4 +34,4 @@ sources: - https://www.pgadmin.org/ title: pgAdmin train: community -version: 1.0.5 +version: 1.0.6 diff --git a/ix-dev/community/pgadmin/templates/library/base_v1_1_4/utils.py b/ix-dev/community/pgadmin/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/pgadmin/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/pigallery2/app.yaml b/ix-dev/community/pigallery2/app.yaml index f9e6a9dd74..78a5dcaef6 100644 --- a/ix-dev/community/pigallery2/app.yaml +++ b/ix-dev/community/pigallery2/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/pigallery2/icons/icon.png keywords: - photo - media -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -39,4 +39,4 @@ sources: - https://github.com/bpatrik/pigallery2 title: PiGallery2 train: community -version: 1.0.6 +version: 1.0.7 diff --git a/ix-dev/community/pigallery2/templates/library/base_v1_1_4/utils.py b/ix-dev/community/pigallery2/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/pigallery2/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/piwigo/app.yaml b/ix-dev/community/piwigo/app.yaml index 3cc89a5576..ee8ee9757a 100644 --- a/ix-dev/community/piwigo/app.yaml +++ b/ix-dev/community/piwigo/app.yaml @@ -22,8 +22,8 @@ icon: https://media.sys.truenas.net/apps/piwigo/icons/icon.svg keywords: - photo - gallery -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -47,4 +47,4 @@ sources: - https://hub.docker.com/r/linuxserver/piwigo title: Piwigo train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/piwigo/templates/library/base_v1_1_4/utils.py b/ix-dev/community/piwigo/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/piwigo/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/planka/app.yaml b/ix-dev/community/planka/app.yaml index 4846556fbb..2bf2c468dd 100644 --- a/ix-dev/community/planka/app.yaml +++ b/ix-dev/community/planka/app.yaml @@ -10,8 +10,8 @@ keywords: - kanban - project - task -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -35,4 +35,4 @@ sources: - https://github.com/plankanban/planka title: Planka train: community -version: 1.0.13 +version: 1.0.14 diff --git a/ix-dev/community/planka/templates/library/base_v1_1_4/utils.py b/ix-dev/community/planka/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/planka/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/plex-auto-languages/app.yaml b/ix-dev/community/plex-auto-languages/app.yaml index 7410237226..3517325876 100644 --- a/ix-dev/community/plex-auto-languages/app.yaml +++ b/ix-dev/community/plex-auto-languages/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/plex-auto-languages/icons/icon.svg keywords: - plex - languages -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -28,4 +28,4 @@ sources: - https://hub.docker.com/r/remirigal/plex-auto-languages title: Plex Auto Languages train: community -version: 1.0.16 +version: 1.0.17 diff --git a/ix-dev/community/plex-auto-languages/templates/library/base_v1_1_4/utils.py b/ix-dev/community/plex-auto-languages/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/plex-auto-languages/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/portainer/app.yaml b/ix-dev/community/portainer/app.yaml index 54e33aebc1..2b6443bd0c 100644 --- a/ix-dev/community/portainer/app.yaml +++ b/ix-dev/community/portainer/app.yaml @@ -28,8 +28,8 @@ keywords: - docker - compose - container -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -49,4 +49,4 @@ sources: - https://github.com/portainer/portainer title: Portainer train: community -version: 1.2.14 +version: 1.2.15 diff --git a/ix-dev/community/portainer/templates/library/base_v1_1_4/utils.py b/ix-dev/community/portainer/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/portainer/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/prowlarr/app.yaml b/ix-dev/community/prowlarr/app.yaml index 21862f117e..eb3fdc5869 100644 --- a/ix-dev/community/prowlarr/app.yaml +++ b/ix-dev/community/prowlarr/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/prowlarr/icons/icon.png keywords: - indexer -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -29,4 +29,4 @@ sources: - https://prowlarr.com title: Prowlarr train: community -version: 1.2.15 +version: 1.2.16 diff --git a/ix-dev/community/prowlarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/prowlarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/prowlarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/qbittorrent/app.yaml b/ix-dev/community/qbittorrent/app.yaml index 9f9fd43375..03c0af569d 100644 --- a/ix-dev/community/qbittorrent/app.yaml +++ b/ix-dev/community/qbittorrent/app.yaml @@ -11,8 +11,8 @@ keywords: - media - torrent - download -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://www.qbittorrent.org/ title: qBittorrent train: community -version: 1.0.29 +version: 1.0.30 diff --git a/ix-dev/community/qbittorrent/templates/library/base_v1_1_4/utils.py b/ix-dev/community/qbittorrent/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/qbittorrent/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/radarr/app.yaml b/ix-dev/community/radarr/app.yaml index 474e0c3b01..7be851159e 100644 --- a/ix-dev/community/radarr/app.yaml +++ b/ix-dev/community/radarr/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/radarr/icons/icon.png keywords: - media - movies -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -32,4 +32,4 @@ sources: - https://github.com/Radarr/Radarr title: Radarr train: community -version: 1.1.13 +version: 1.1.14 diff --git a/ix-dev/community/radarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/radarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/radarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/readarr/app.yaml b/ix-dev/community/readarr/app.yaml index dda961b817..6c2bfc9d8f 100644 --- a/ix-dev/community/readarr/app.yaml +++ b/ix-dev/community/readarr/app.yaml @@ -11,8 +11,8 @@ keywords: - media - ebook - audiobook -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -33,4 +33,4 @@ sources: - https://github.com/Readarr/Readarr title: Readarr train: community -version: 1.0.19 +version: 1.0.20 diff --git a/ix-dev/community/readarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/readarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/readarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/recyclarr/app.yaml b/ix-dev/community/recyclarr/app.yaml index f588351ac5..fa53541fd4 100644 --- a/ix-dev/community/recyclarr/app.yaml +++ b/ix-dev/community/recyclarr/app.yaml @@ -11,8 +11,8 @@ keywords: - sync - sonarr - radarr -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://github.com/recyclarr/recyclarr/tree/recyclarr title: Recyclarr train: community -version: 1.0.9 +version: 1.0.10 diff --git a/ix-dev/community/recyclarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/recyclarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/recyclarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/redis/app.yaml b/ix-dev/community/redis/app.yaml index 2982497df6..78f2448bf9 100644 --- a/ix-dev/community/redis/app.yaml +++ b/ix-dev/community/redis/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/redis/icons/icon.png keywords: - cache -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -29,4 +29,4 @@ sources: - https://redis.io/ title: Redis train: community -version: 1.0.8 +version: 1.0.9 diff --git a/ix-dev/community/redis/templates/library/base_v1_1_4/utils.py b/ix-dev/community/redis/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/redis/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/roundcube/app.yaml b/ix-dev/community/roundcube/app.yaml index b93f4047ef..e51f7db176 100644 --- a/ix-dev/community/roundcube/app.yaml +++ b/ix-dev/community/roundcube/app.yaml @@ -20,8 +20,8 @@ icon: https://media.sys.truenas.net/apps/roundcube/icons/icon.png keywords: - webmail - email -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -49,4 +49,4 @@ sources: - https://hub.docker.com/r/roundcube/roundcubemail/ title: Roundcube train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/roundcube/templates/library/base_v1_1_4/utils.py b/ix-dev/community/roundcube/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/roundcube/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/rsyncd/app.yaml b/ix-dev/community/rsyncd/app.yaml index c7a4ff2999..81aae9b5c3 100644 --- a/ix-dev/community/rsyncd/app.yaml +++ b/ix-dev/community/rsyncd/app.yaml @@ -22,8 +22,8 @@ keywords: - sync - rsync - file transfer -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -41,4 +41,4 @@ sources: - https://hub.docker.com/r/ixsystems/rsyncd title: Rsync Daemon train: community -version: 1.0.15 +version: 1.0.16 diff --git a/ix-dev/community/rsyncd/templates/library/base_v1_1_4/utils.py b/ix-dev/community/rsyncd/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/rsyncd/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/rust-desk/app.yaml b/ix-dev/community/rust-desk/app.yaml index fa4f5be738..c2554b2811 100644 --- a/ix-dev/community/rust-desk/app.yaml +++ b/ix-dev/community/rust-desk/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/rust-desk/icons/icon.png keywords: - remote - desktop -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -28,4 +28,4 @@ sources: - https://github.com/rustdesk/rustdesk-server title: Rust Desk train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/rust-desk/templates/library/base_v1_1_4/utils.py b/ix-dev/community/rust-desk/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/rust-desk/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/sabnzbd/app.yaml b/ix-dev/community/sabnzbd/app.yaml index 645955f4f9..52e756e71d 100644 --- a/ix-dev/community/sabnzbd/app.yaml +++ b/ix-dev/community/sabnzbd/app.yaml @@ -10,8 +10,8 @@ keywords: - media - usenet - newsreader -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -32,4 +32,4 @@ sources: - https://sabnzbd.org/ title: SABnzbd train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/sabnzbd/templates/library/base_v1_1_4/utils.py b/ix-dev/community/sabnzbd/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/sabnzbd/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/searxng/app.yaml b/ix-dev/community/searxng/app.yaml index 781f908a2d..2b102154ec 100644 --- a/ix-dev/community/searxng/app.yaml +++ b/ix-dev/community/searxng/app.yaml @@ -12,8 +12,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/searxng/icons/icon.svg keywords: - search -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/searxng/searxng title: SearXNG train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/searxng/templates/library/base_v1_1_4/utils.py b/ix-dev/community/searxng/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/searxng/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/sftpgo/app.yaml b/ix-dev/community/sftpgo/app.yaml index a6d43ce69e..8b097ebcf5 100644 --- a/ix-dev/community/sftpgo/app.yaml +++ b/ix-dev/community/sftpgo/app.yaml @@ -9,8 +9,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/sftpgo/icons/icon.png keywords: - sftp -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -28,4 +28,4 @@ sources: - https://github.com/drakkan/sftpgo title: SFTPGo train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/sftpgo/templates/library/base_v1_1_4/utils.py b/ix-dev/community/sftpgo/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/sftpgo/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/sonarr/app.yaml b/ix-dev/community/sonarr/app.yaml index 0c4126c01e..7711cb872d 100644 --- a/ix-dev/community/sonarr/app.yaml +++ b/ix-dev/community/sonarr/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/sonarr/icons/icon.png keywords: - media - series -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/Sonarr/Sonarr title: Sonarr train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/sonarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/sonarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/sonarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/tailscale/app.yaml b/ix-dev/community/tailscale/app.yaml index c6fb356d2f..0c2366e64e 100644 --- a/ix-dev/community/tailscale/app.yaml +++ b/ix-dev/community/tailscale/app.yaml @@ -23,8 +23,8 @@ icon: https://media.sys.truenas.net/apps/tailscale/icons/icon.png keywords: - vpn - tailscale -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -42,4 +42,4 @@ sources: - https://hub.docker.com/r/tailscale/tailscale title: Tailscale train: community -version: 1.1.16 +version: 1.1.17 diff --git a/ix-dev/community/tailscale/templates/library/base_v1_1_4/utils.py b/ix-dev/community/tailscale/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/tailscale/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/tailscale/templates/library/community/tailscale/v1_1_16/util.py b/ix-dev/community/tailscale/templates/library/community/tailscale/v1_1_17/util.py similarity index 93% rename from ix-dev/community/tailscale/templates/library/community/tailscale/v1_1_16/util.py rename to ix-dev/community/tailscale/templates/library/community/tailscale/v1_1_17/util.py index c0ce1e2517..ec0a672aad 100644 --- a/ix-dev/community/tailscale/templates/library/community/tailscale/v1_1_16/util.py +++ b/ix-dev/community/tailscale/templates/library/community/tailscale/v1_1_17/util.py @@ -1,4 +1,4 @@ -from base_v1_1_4 import utils +from base_v1_1_5 import utils def get_args(data): diff --git a/ix-dev/community/tautulli/app.yaml b/ix-dev/community/tautulli/app.yaml index f898cfab9e..7ae0ae8c47 100644 --- a/ix-dev/community/tautulli/app.yaml +++ b/ix-dev/community/tautulli/app.yaml @@ -11,8 +11,8 @@ keywords: - media - analytics - notifications -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -34,4 +34,4 @@ sources: - https://github.com/Tautulli/Tautulli title: Tautulli train: community -version: 1.0.22 +version: 1.0.23 diff --git a/ix-dev/community/tautulli/templates/library/base_v1_1_4/utils.py b/ix-dev/community/tautulli/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/tautulli/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/tdarr/app.yaml b/ix-dev/community/tdarr/app.yaml index 4a4e2e19a7..6af206fa8e 100644 --- a/ix-dev/community/tdarr/app.yaml +++ b/ix-dev/community/tdarr/app.yaml @@ -18,8 +18,8 @@ icon: https://media.sys.truenas.net/apps/tdarr/icons/icon.png keywords: - encode - transcode -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -40,4 +40,4 @@ sources: - https://docs.tdarr.io/docs title: Tdarr train: community -version: 1.0.10 +version: 1.0.11 diff --git a/ix-dev/community/tdarr/templates/library/base_v1_1_4/utils.py b/ix-dev/community/tdarr/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/tdarr/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/terraria/app.yaml b/ix-dev/community/terraria/app.yaml index 96ba4c00ad..9927f284fc 100644 --- a/ix-dev/community/terraria/app.yaml +++ b/ix-dev/community/terraria/app.yaml @@ -13,8 +13,8 @@ keywords: - game - terraria - world -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -32,4 +32,4 @@ sources: - https://github.com/ryansheehan/terraria title: Terraria train: community -version: 1.0.6 +version: 1.0.7 diff --git a/ix-dev/community/terraria/templates/library/base_v1_1_4/utils.py b/ix-dev/community/terraria/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/terraria/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/tftpd-hpa/app.yaml b/ix-dev/community/tftpd-hpa/app.yaml index 105bceb93e..4175597d05 100644 --- a/ix-dev/community/tftpd-hpa/app.yaml +++ b/ix-dev/community/tftpd-hpa/app.yaml @@ -17,8 +17,8 @@ icon: https://media.sys.truenas.net/apps/tftpd-hpa/icons/icon.png keywords: - tftp - netboot -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -36,4 +36,4 @@ sources: - https://hub.docker.com/r/ixsystems/tftpd-hpa title: TFTP Server train: community -version: 1.0.11 +version: 1.0.12 diff --git a/ix-dev/community/tftpd-hpa/templates/library/base_v1_1_4/utils.py b/ix-dev/community/tftpd-hpa/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/tftpd-hpa/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/tiny-media-manager/app.yaml b/ix-dev/community/tiny-media-manager/app.yaml index b0c6258f50..00c2e92f57 100644 --- a/ix-dev/community/tiny-media-manager/app.yaml +++ b/ix-dev/community/tiny-media-manager/app.yaml @@ -16,8 +16,8 @@ keywords: - media - tv-shows - movies -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -39,4 +39,4 @@ sources: - https://hub.docker.com/r/tinymediamanager/tinymediamanager title: Tiny Media Manager train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/tiny-media-manager/templates/library/base_v1_1_4/utils.py b/ix-dev/community/tiny-media-manager/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/tiny-media-manager/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/transmission/app.yaml b/ix-dev/community/transmission/app.yaml index e83bb36bbd..632f8be7d0 100644 --- a/ix-dev/community/transmission/app.yaml +++ b/ix-dev/community/transmission/app.yaml @@ -10,8 +10,8 @@ keywords: - media - torrent - download -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -29,4 +29,4 @@ sources: - https://transmissionbt.com/ title: Transmission train: community -version: 1.0.6 +version: 1.0.7 diff --git a/ix-dev/community/transmission/templates/library/base_v1_1_4/utils.py b/ix-dev/community/transmission/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/transmission/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/twofactor-auth/app.yaml b/ix-dev/community/twofactor-auth/app.yaml index 36e35e105f..72e1d2add7 100644 --- a/ix-dev/community/twofactor-auth/app.yaml +++ b/ix-dev/community/twofactor-auth/app.yaml @@ -11,8 +11,8 @@ keywords: - security - 2fa - otp -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://hub.docker.com/r/2fauth/2fauth/ title: 2FAuth train: community -version: 1.0.8 +version: 1.0.9 diff --git a/ix-dev/community/twofactor-auth/templates/library/base_v1_1_4/utils.py b/ix-dev/community/twofactor-auth/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/twofactor-auth/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/unifi-controller/app.yaml b/ix-dev/community/unifi-controller/app.yaml index 3667f07b51..7a8d1f7836 100644 --- a/ix-dev/community/unifi-controller/app.yaml +++ b/ix-dev/community/unifi-controller/app.yaml @@ -10,8 +10,8 @@ keywords: - controller - unifi - network -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://hub.docker.com/r/goofball222/unifi title: Unifi Controller train: community -version: 1.2.11 +version: 1.2.12 diff --git a/ix-dev/community/unifi-controller/templates/library/base_v1_1_4/utils.py b/ix-dev/community/unifi-controller/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/unifi-controller/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/unifi-protect-backup/app.yaml b/ix-dev/community/unifi-protect-backup/app.yaml index 5e95f9953d..5509fb70b5 100644 --- a/ix-dev/community/unifi-protect-backup/app.yaml +++ b/ix-dev/community/unifi-protect-backup/app.yaml @@ -18,8 +18,8 @@ icon: https://media.sys.truenas.net/apps/unifi-protect-backup/icons/icon.svg keywords: - backup - unifi-protect -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -37,4 +37,4 @@ sources: - https://github.com/ep1cman/unifi-protect-backup/pkgs/container/unifi-protect-backup title: Unifi Protect Backup train: community -version: 1.0.17 +version: 1.0.18 diff --git a/ix-dev/community/unifi-protect-backup/templates/library/base_v1_1_4/utils.py b/ix-dev/community/unifi-protect-backup/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/unifi-protect-backup/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/vaultwarden/app.yaml b/ix-dev/community/vaultwarden/app.yaml index c7381f53e9..271525c5c6 100644 --- a/ix-dev/community/vaultwarden/app.yaml +++ b/ix-dev/community/vaultwarden/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/vaultwarden/icons/icon.png keywords: - password - manager -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -34,4 +34,4 @@ sources: - https://github.com/dani-garcia/vaultwarden title: Vaultwarden train: community -version: 1.0.8 +version: 1.0.9 diff --git a/ix-dev/community/vaultwarden/templates/library/base_v1_1_4/utils.py b/ix-dev/community/vaultwarden/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/vaultwarden/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/vikunja/app.yaml b/ix-dev/community/vikunja/app.yaml index 68ea5c1b80..06bdb91668 100644 --- a/ix-dev/community/vikunja/app.yaml +++ b/ix-dev/community/vikunja/app.yaml @@ -8,8 +8,8 @@ host_mounts: [] icon: https://media.sys.truenas.net/apps/vikunja/icons/icon.png keywords: - todo -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -46,4 +46,4 @@ sources: - https://vikunja.io/ title: Vikunja train: community -version: 1.2.15 +version: 1.2.16 diff --git a/ix-dev/community/vikunja/templates/library/base_v1_1_4/utils.py b/ix-dev/community/vikunja/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/vikunja/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/webdav/app.yaml b/ix-dev/community/webdav/app.yaml index 7e1ec57bfa..6a70d98903 100644 --- a/ix-dev/community/webdav/app.yaml +++ b/ix-dev/community/webdav/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/webdav/icons/icon.png keywords: - webdav - file-sharing -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -28,4 +28,4 @@ sources: - http://www.webdav.org/ title: WebDAV train: community -version: 1.0.13 +version: 1.0.14 diff --git a/ix-dev/community/webdav/templates/library/base_v1_1_4/utils.py b/ix-dev/community/webdav/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/webdav/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/whoogle/app.yaml b/ix-dev/community/whoogle/app.yaml index 1610b886db..2a8a5f0a3b 100644 --- a/ix-dev/community/whoogle/app.yaml +++ b/ix-dev/community/whoogle/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/whoogle/icons/icon.png keywords: - search - engine -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://hub.docker.com/r/benbusby/whoogle-search title: Whoogle train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/whoogle/templates/library/base_v1_1_4/utils.py b/ix-dev/community/whoogle/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/whoogle/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/wordpress/app.yaml b/ix-dev/community/wordpress/app.yaml index 8a5cb1bebc..db956e8e29 100644 --- a/ix-dev/community/wordpress/app.yaml +++ b/ix-dev/community/wordpress/app.yaml @@ -11,8 +11,8 @@ icon: https://media.sys.truenas.net/apps/wordpress/icons/icon.png keywords: - cms - blog -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -38,4 +38,4 @@ sources: - https://hub.docker.com/_/wordpress title: Wordpress train: community -version: 1.0.7 +version: 1.0.8 diff --git a/ix-dev/community/wordpress/templates/library/base_v1_1_4/utils.py b/ix-dev/community/wordpress/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/wordpress/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/community/zerotier/app.yaml b/ix-dev/community/zerotier/app.yaml index 51a00a73c9..a010d19b19 100644 --- a/ix-dev/community/zerotier/app.yaml +++ b/ix-dev/community/zerotier/app.yaml @@ -34,8 +34,8 @@ icon: https://media.sys.truenas.net/apps/zerotier/icons/icon.png keywords: - vpn - zerotier -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -53,4 +53,4 @@ sources: - https://hub.docker.com/r/zerotier/zerotier title: Zerotier train: community -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/community/zerotier/templates/library/base_v1_1_4/utils.py b/ix-dev/community/zerotier/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/community/zerotier/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/enterprise/minio/app.yaml b/ix-dev/enterprise/minio/app.yaml index 3a57b41ba6..bea0f497d4 100644 --- a/ix-dev/enterprise/minio/app.yaml +++ b/ix-dev/enterprise/minio/app.yaml @@ -11,8 +11,8 @@ keywords: - minio - cloud - s3 -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/minio/minio title: MinIO train: enterprise -version: 1.1.8 +version: 1.1.9 diff --git a/ix-dev/enterprise/minio/templates/library/base_v1_1_4/utils.py b/ix-dev/enterprise/minio/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/enterprise/minio/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_8/__init__.py b/ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_9/__init__.py similarity index 100% rename from ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_8/__init__.py rename to ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_9/__init__.py diff --git a/ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_8/data.py b/ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_9/data.py similarity index 98% rename from ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_8/data.py rename to ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_9/data.py index a6e7fd07c4..1e40f30ff0 100644 --- a/ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_8/data.py +++ b/ix-dev/enterprise/minio/templates/library/enterprise/minio/v1_1_9/data.py @@ -1,4 +1,4 @@ -from base_v1_1_4 import utils +from base_v1_1_5 import utils def validate(data): diff --git a/ix-dev/enterprise/syncthing/app.yaml b/ix-dev/enterprise/syncthing/app.yaml index f97d2c51a5..a2099bd28b 100644 --- a/ix-dev/enterprise/syncthing/app.yaml +++ b/ix-dev/enterprise/syncthing/app.yaml @@ -25,8 +25,8 @@ icon: https://media.sys.truenas.net/apps/syncthing/icons/icon.svg keywords: - sync - file-sharing -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -49,4 +49,4 @@ sources: - https://hub.docker.com/r/syncthing/syncthing title: Syncthing train: enterprise -version: 1.0.15 +version: 1.0.16 diff --git a/ix-dev/enterprise/syncthing/templates/library/base_v1_1_4/utils.py b/ix-dev/enterprise/syncthing/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/enterprise/syncthing/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/collabora/app.yaml b/ix-dev/stable/collabora/app.yaml index ebfac2a279..0661693a45 100644 --- a/ix-dev/stable/collabora/app.yaml +++ b/ix-dev/stable/collabora/app.yaml @@ -27,8 +27,8 @@ keywords: - office - documents - productivity -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -53,4 +53,4 @@ sources: - https://hub.docker.com/r/collabora/code title: Collabora train: stable -version: 1.1.16 +version: 1.1.17 diff --git a/ix-dev/stable/collabora/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/collabora/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/collabora/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/diskoverdata/app.yaml b/ix-dev/stable/diskoverdata/app.yaml index 57fb967f82..9885310a11 100644 --- a/ix-dev/stable/diskoverdata/app.yaml +++ b/ix-dev/stable/diskoverdata/app.yaml @@ -23,8 +23,8 @@ keywords: - monitoring - management - discovery -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -50,4 +50,4 @@ sources: - https://github.com/linuxserver/docker-diskover title: Diskover Data train: stable -version: 1.3.9 +version: 1.3.10 diff --git a/ix-dev/stable/diskoverdata/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/diskoverdata/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/diskoverdata/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/elastic-search/app.yaml b/ix-dev/stable/elastic-search/app.yaml index 4e0ac2e876..ec95cf3be8 100644 --- a/ix-dev/stable/elastic-search/app.yaml +++ b/ix-dev/stable/elastic-search/app.yaml @@ -10,8 +10,8 @@ icon: https://media.sys.truenas.net/apps/elastic-search/icons/icon.svg keywords: - search - elastic -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://www.elastic.co/guide/en/elasticsearch/reference/master/docker.html#docker-configuration-methods title: Elastic Search train: stable -version: 1.1.13 +version: 1.1.14 diff --git a/ix-dev/stable/elastic-search/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/elastic-search/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/elastic-search/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/emby/app.yaml b/ix-dev/stable/emby/app.yaml index 17f034ea9f..acb3c887e7 100644 --- a/ix-dev/stable/emby/app.yaml +++ b/ix-dev/stable/emby/app.yaml @@ -27,8 +27,8 @@ keywords: - series - tv - streaming -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -49,4 +49,4 @@ sources: - https://github.com/truenas/charts/tree/master/charts/emby title: Emby Server train: stable -version: 1.1.13 +version: 1.1.14 diff --git a/ix-dev/stable/emby/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/emby/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/emby/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/home-assistant/app.yaml b/ix-dev/stable/home-assistant/app.yaml index 89f4b13403..a08048b781 100644 --- a/ix-dev/stable/home-assistant/app.yaml +++ b/ix-dev/stable/home-assistant/app.yaml @@ -20,8 +20,8 @@ icon: https://media.sys.truenas.net/apps/home-assistant/icons/icon.png keywords: - home-automation - assistant -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -45,4 +45,4 @@ sources: - https://github.com/truenas/charts/tree/master/charts/home-assistant title: Home Assistant train: stable -version: 1.2.23 +version: 1.2.24 diff --git a/ix-dev/stable/home-assistant/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/home-assistant/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/home-assistant/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/ix-app/app.yaml b/ix-dev/stable/ix-app/app.yaml index 3cd8d5ea9f..9a451865b9 100644 --- a/ix-dev/stable/ix-app/app.yaml +++ b/ix-dev/stable/ix-app/app.yaml @@ -7,8 +7,8 @@ home: https://www.truenas.com/ host_mounts: [] icon: https://media.sys.truenas.net/apps/ix-chart/icons/icon.webp keywords: [] -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -19,4 +19,4 @@ screenshots: [] sources: [] title: iX App train: stable -version: 1.0.11 +version: 1.0.12 diff --git a/ix-dev/stable/ix-app/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/ix-app/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/ix-app/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/minio/app.yaml b/ix-dev/stable/minio/app.yaml index dd3c0fa0e5..f2d7e08be9 100644 --- a/ix-dev/stable/minio/app.yaml +++ b/ix-dev/stable/minio/app.yaml @@ -10,8 +10,8 @@ keywords: - storage - object-storage - S3 -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -31,4 +31,4 @@ sources: - https://github.com/minio/minio title: MinIO train: stable -version: 1.1.15 +version: 1.1.16 diff --git a/ix-dev/stable/minio/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/minio/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/minio/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/netdata/app.yaml b/ix-dev/stable/netdata/app.yaml index 3b8a937652..bc9cda03b3 100644 --- a/ix-dev/stable/netdata/app.yaml +++ b/ix-dev/stable/netdata/app.yaml @@ -34,8 +34,8 @@ keywords: - alerting - metric - monitoring -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -58,4 +58,4 @@ sources: - https://github.com/netdata/netdata title: Netdata train: stable -version: 1.1.15 +version: 1.1.16 diff --git a/ix-dev/stable/netdata/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/netdata/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/netdata/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/photoprism/app.yaml b/ix-dev/stable/photoprism/app.yaml index 3dd82228b4..07553ac261 100644 --- a/ix-dev/stable/photoprism/app.yaml +++ b/ix-dev/stable/photoprism/app.yaml @@ -22,8 +22,8 @@ keywords: - media - photos - image -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -42,4 +42,4 @@ sources: - https://photoprism.app/ title: Photoprism train: stable -version: 1.1.14 +version: 1.1.15 diff --git a/ix-dev/stable/photoprism/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/photoprism/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/photoprism/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/pihole/app.yaml b/ix-dev/stable/pihole/app.yaml index eab25408ae..8280f713f6 100644 --- a/ix-dev/stable/pihole/app.yaml +++ b/ix-dev/stable/pihole/app.yaml @@ -33,8 +33,8 @@ icon: https://media.sys.truenas.net/apps/pihole/icons/icon.png keywords: - networking - dns -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -53,4 +53,4 @@ sources: - https://github.com/truenas/charts/tree/master/charts/pihole title: Pi-hole train: stable -version: 1.1.11 +version: 1.1.12 diff --git a/ix-dev/stable/pihole/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/pihole/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/pihole/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/plex/app.yaml b/ix-dev/stable/plex/app.yaml index 8ab9b7b292..9b96b8bb7d 100644 --- a/ix-dev/stable/plex/app.yaml +++ b/ix-dev/stable/plex/app.yaml @@ -27,8 +27,8 @@ keywords: - series - tv - streaming -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -48,4 +48,4 @@ sources: - https://hub.docker.com/r/plexinc/pms-docker title: Plex train: stable -version: 1.0.24 +version: 1.0.25 diff --git a/ix-dev/stable/plex/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/plex/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/plex/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/prometheus/app.yaml b/ix-dev/stable/prometheus/app.yaml index fc4faf14cf..46437dc448 100644 --- a/ix-dev/stable/prometheus/app.yaml +++ b/ix-dev/stable/prometheus/app.yaml @@ -9,8 +9,8 @@ icon: https://media.sys.truenas.net/apps/prometheus/icons/icon.png keywords: - metrics - prometheus -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -30,4 +30,4 @@ sources: - https://prometheus.io title: Prometheus train: stable -version: 1.1.12 +version: 1.1.13 diff --git a/ix-dev/stable/prometheus/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/prometheus/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/prometheus/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/storj/app.yaml b/ix-dev/stable/storj/app.yaml index c1d1587937..902543d283 100644 --- a/ix-dev/stable/storj/app.yaml +++ b/ix-dev/stable/storj/app.yaml @@ -18,8 +18,8 @@ keywords: - networking - financial - file-sharing -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -37,4 +37,4 @@ sources: - https://www.storj.io title: Storj train: stable -version: 1.1.10 +version: 1.1.11 diff --git a/ix-dev/stable/storj/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/storj/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/storj/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/syncthing/app.yaml b/ix-dev/stable/syncthing/app.yaml index a961758344..a89d7d0c21 100644 --- a/ix-dev/stable/syncthing/app.yaml +++ b/ix-dev/stable/syncthing/app.yaml @@ -26,8 +26,8 @@ keywords: - sync - file-sharing - backup -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -50,4 +50,4 @@ sources: - https://hub.docker.com/r/syncthing/syncthing title: Syncthing train: stable -version: 1.0.28 +version: 1.0.29 diff --git a/ix-dev/stable/syncthing/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/syncthing/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/syncthing/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value diff --git a/ix-dev/stable/wg-easy/app.yaml b/ix-dev/stable/wg-easy/app.yaml index 2080af7c54..ba2ecf0539 100644 --- a/ix-dev/stable/wg-easy/app.yaml +++ b/ix-dev/stable/wg-easy/app.yaml @@ -16,8 +16,8 @@ keywords: - wireguard - network - vpn -lib_version: 1.1.4 -lib_version_hash: 6e32ff5969906d9c3a10fea2b17fdd3197afb052d3432344da03188d8a907113 +lib_version: 1.1.5 +lib_version_hash: 51332f2b032a0c473693458cd93daa96d56604241878e538c07cb85b8be66727 maintainers: - email: dev@ixsystems.com name: truenas @@ -35,4 +35,4 @@ sources: - https://github.com/wg-easy/wg-easy title: WG Easy train: stable -version: 1.0.20 +version: 1.0.21 diff --git a/ix-dev/stable/wg-easy/templates/library/base_v1_1_4/utils.py b/ix-dev/stable/wg-easy/templates/library/base_v1_1_4/utils.py deleted file mode 100644 index 3d76208ff1..0000000000 --- a/ix-dev/stable/wg-easy/templates/library/base_v1_1_4/utils.py +++ /dev/null @@ -1,135 +0,0 @@ -import hashlib -import secrets -import bcrypt -import sys -import re - -from . import security - - -class TemplateException(Exception): - pass - - -def throw_error(message): - # When throwing a known error, hide the traceback - # This is because the error is also shown in the UI - # and having a traceback makes it hard for user to read - sys.tracebacklimit = 0 - raise TemplateException(message) - - -def secure_string(length): - return secrets.token_urlsafe(length) - - -def basic_auth_header(username, password): - return f"Basic {security.basic_auth(username, password)}" - - -def bcrypt_hash(password, escape=True): - hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") - if escape: - # Docker compose will try to expand the value, so we need to escape it - return hashed.replace("$", "$$") - return hashed - - -def match_regex(value, regex): - if not re.match(regex, value): - return False - return True - - -def must_match_regex(value, regex): - if not match_regex(value, regex): - throw_error(f"Expected [{value}] to match [{regex}]") - return value - - -def merge_dicts(*dicts): - merged_dict = {} - for dictionary in dicts: - merged_dict.update(dictionary) - return merged_dict - - -# Basic validation for a path (Expand later) -def valid_path(path=""): - if not path.startswith("/"): - throw_error(f"Expected path [{path}] to start with /") - - # There is no reason to allow / as a path, either on host or in a container - if path == "/": - throw_error(f"Expected path [{path}] to not be /") - - return path - - -def camel_case(string): - return string.title() - - -def is_boolean(string): - return string.lower() in ["true", "false"] - - -def is_number(string): - try: - float(string) - return True - except ValueError: - return False - - -def get_image(images={}, name=""): - if not images: - throw_error("Expected [images] to be set") - if name not in images: - throw_error(f"Expected [images.{name}] to be set") - if not images[name].get("repository") or not images[name].get("tag"): - throw_error( - f"Expected [images.{name}.repository] and [images.{name}.tag] to be set" - ) - - return f"{images[name]['repository']}:{images[name]['tag']}" - - -def hash_data(data=""): - if not data: - throw_error("Expected [data] to be set") - return hashlib.sha256(data.encode("utf-8")).hexdigest() - - -def get_image_with_hashed_data(images={}, name="", data=""): - return f"ix-{get_image(images, name)}-{hash_data(data)}" - - -def copy_dict(dict): - return dict.copy() - - -# Replaces all single dollar signs with double dollar signs -# Docker tries to expand shell variables, so we need to -# escape them in multiple places -# It will not replace dollar signs that are already escaped -def escape_dollar(text): - # https://regex101.com/r/tdbI7y/1 - return re.sub(r"(? str: + return text.replace("$", "$$") + + +def auto_cast(value): + try: + return int(value) + except ValueError: + pass + + try: + return float(value) + except ValueError: + pass + + if value.lower() in ["true", "false"]: + return value.lower() == "true" + + return value