deploy/patch-actions-media-selfheal.py
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env python3
"""Patch idempotent de vektor-actions pour l'auto-réparation média.
Installer préalablement le handler en /usr/local/bin/vektor-media-selfheal.
Ce patch ajoute seulement des tokens fixes et ne lance aucune réparation.
"""
import sys
PATH = "/usr/local/bin/vektor-actions"
OLD_TAIL = (
"|diagnose_(pve|net|media|services|failover|disk_(101|102|103|104|105|106|107|108|109|110|111)"
"|docker_(101|102|103|104|105|106|107|108|109|110|111)))$\""
)
NEW_TAIL = (
"|diagnose_(pve|net|media|services|failover|disk_(101|102|103|104|105|106|107|108|109|110|111)"
"|docker_(101|102|103|104|105|106|107|108|109|110|111))"
"|selfheal_media_(jellyfin|immich|authelia|reset_jellyfin|reset_immich|reset_authelia))$\""
)
MEDIA_OLD = '|selfheal_media_(jellyfin|immich|reset_jellyfin|reset_immich))$"'
MEDIA_NEW_GROUP = '|selfheal_media_(jellyfin|immich|authelia|reset_jellyfin|reset_immich|reset_authelia))$"'
PATCHED_MARKER = "selfheal_media_(jellyfin|immich|authelia|reset_jellyfin|reset_immich|reset_authelia)"
ANCHOR = " diagnose_*)"
CASE = """ selfheal_media_*)
if [ -x /usr/local/bin/vektor-media-selfheal ]; then
/usr/local/bin/vektor-media-selfheal "$ACTION"
else
echo "ERROR: script vektor-media-selfheal absent"
exit 1
fi
;;
diagnose_*)"""
def main() -> int:
with open(PATH) as f:
source = f.read()
if PATCHED_MARKER in source:
print("deja patche")
return 0
if MEDIA_OLD in source:
# Whitelist média v1 déjà posée : ajouter seulement authelia aux tokens.
assert ANCHOR in source, "case selfheal_media_*/diagnose_* introuvable"
source = source.replace(MEDIA_OLD, MEDIA_NEW_GROUP, 1)
else:
assert OLD_TAIL in source, "fin de regex diagnose/whitelist introuvable"
assert ANCHOR in source, "case diagnose_* introuvable"
source = source.replace(OLD_TAIL, NEW_TAIL, 1)
source = source.replace(ANCHOR, CASE, 1)
with open(PATH, "w") as f:
f.write(source)
print("patche : whitelist média (authelia incluse) + dispatch contrôlé")
return 0
if __name__ == "__main__":
sys.exit(main())