Sophomorix als Datenquelle in Bashskripten

Hi.

Wer kennt das nicht: man hat eine sophomorix Gruppe (Projekt, Schülis, Lehris, etc.) und möchte mit den Usernamen etwas anstellen…

Hier, wie ich es in Bash mache:

# group to add                                                                                                                                                                                                     
group="p_ag-schulsanitaetsdienst"
sophomorix-project -i -v -p p_ag-schulsanitaetsdienst -jj 2>&1 >/dev/null | grep -v '^# JSON' | jq  -c '."GROUPS"."p_ag-schulsanitaetsdienst"."sophomorixMembers" | .[]' | while read i; do
    echo $i ;
    stripped=$(echo $i | xargs echo)
    /usr/sbin/sophomorix-managementgroup --wifi $stripped
done

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.

Klar, das Tool „jq“ muss installiert sein.

Hi Tobias,

Eine Alternative um die Mitglieder zu erhalten:

$ python3 -c "from linuxmusterTools.ldapconnector import LMNLdapReader as lr;print(','.join(lr.getval('/projects/p_bla-bli','sophomorixMembers')))"
frayeka,frayka

Gruß

Arnaud

1 „Gefällt mir“

Danke, Arnaud, für alles.

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