Würde sophomorix -jj bereits sinnvoll arbeiten (z.B. die ganze Kommentare als stderr und den richtigen JSON-String (also ohne JSON-BEGIN quatsch) auf stdout), dann sähe es etwas einfacher aus.
Habe jetzt mal ein Beispielskript für meine Nextcloud - Quota setzung geschrieben.
Ich weiß, ich könnte auch in der Nextcloud das quota-Attribut aus sophomorix nehmen… will ich lieber nicht ohne testen, daher…
pythonscript holt sich die Daten
erstellt ein bash-script
bash-script kann man auf dem server ausführen (mit simulation-switch -s)
kopiert sich auf den NC -dockerhost cloud-ext
führt sich auf dem NC-dockerhost selbst aus
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from linuxmusterTools.ldapconnector import LMNLdapReader as lr
import os
tablet_classes_generator: list[str] = [ '11', 'k1', 'k2' ]
docker_cmd: str = "docker compose exec -u 33 -it nextcloud-fpm"
docker_pwd: str = "/srv/docker/nextcloud"
tablet_classes: list[str] = []
for query_gen in tablet_classes_generator:
# get all classes containing '11' in the search, use the 'cn' attribute
tablet_classes += [ x['cn'] for x in lr.get(f"/schoolclasses/search/{query_gen}", attributes=['cn']) ]
users: list[str] = []
for tablet_class in tablet_classes:
users += lr.getval(f"/schoolclasses/{tablet_class}", "sophomorixMembers")
with open("56-autogen-set-cloudquota-occ.sh", 'wt') as fp:
fp.write(f"""#!/bin/bash
## no command line arguments: your cloudserver should be configured here:
cloudserver="cloud-ext"
## kopiere dieses Script auf den Cloudserver
if [ `hostname -s` = "server" ]; then
echo "Kopiere dieses Script $0 auf den Cloudserver: $cloudserver und führe es dort wieder aus"
scp $0 $cloudserver:$0
ssh -t $cloudserver $0 $1
exit 0
fi
simulate=""
if [ "$1" = "--simulate" -o "$1" = "-s" ]; then
echo "Simulation! Es wird nichts verändert!"
simulate="echo Kommando wäre: "
fi
cd {docker_pwd}
echo "Setze quota aller user aus {tablet_classes_generator}. Ok?"
read
""")
for user in users[0:10]:
fp.write(f"$simulate {docker_cmd} php occ user:setting {user} files quota 1GB\n")
fp.write(f"echo -n '{user}': \n")
fp.write(f"{docker_cmd} php occ user:setting {user} files quota \n")