CustomFields mit linuxmusterTools updaten

Hallo,

@Michael hatte mich gebeten zu zeigen, wie ich die Custom Felder ins Ldap mit linuxmusterTools pflege, ich gebe hier einige kleine Beispiele.

Der Grund für eine solche Pflege ist, dass wir andere Daten in externe Dienste brauchen, wie z.B. Kürzel, Quota, Emailquota, Fächer …

Diese Daten habe ich als csv von verschiedene Quellen, dann brauche ich nur noch einen Skript um die Felder ins Ldap zzu schreiben, der jede Nacht per Cronjob aufgerufen wird:

import csv
from linuxmusterTools.ldapconnector import LMNLdapReader as lr, UserWriter as uw
from linuxmusterTools.quotas import get_user_quotas

# Alle Lehrer auflisten
teachers = lr.get('/roles/teacher', attributes=['cn', 'givenName', 'sn'])

## CSV in der Form NAME;VORNAME;KUERZEL;FACH1,FACH2...;ANDERE DATEN usw...
with open('PFAD/MYCSV.csv','r') as f:
    r = csv.reader(f, delimiter=';')
    for entry in r:
        name = entry[0]
        kuerzel = entry[2]
        for teacher in teachers:
            if teacher['sn'].lower() == name.lower():
                faecher = entry[3].split(',')

                uw.setattr(teacher['cn'], data={'sophomorixCustom1':kuerzel, 'sophomorixCustomMulti1':faecher})
                quotas = get_user_quotas(teacher['cn'])['default-school']
                uw.setattr(teacher['cn'], data={'sophomorixCustom2': f"{quotas['hard_limit']};{quotas['used']}"})
                break
        else:
            print(f"Teacher {name} not found.")

Man kann natürlich auch die Emails anpassen, wie man will:

# Verrücktes Muster z.B. name.--.vorname@DOMAIN
domain = "mydomain.schule" 
email = f"{teacher['sn']}.--.{teacher['givenName']}@{domain}"
uw.setattr(teacher['cn'], data={'proxyAddresses':email})

Ich nutze proxyAddresses als Ldap Email Feld für meine externe Dienste.

linuxmuster-api7 ist basiert auf linuxmuster-tools und ermöglicht, mit passenden Rechten, auch diese Daten zu pflegen, in der Form von einem Request POST SERVER_URL/users/USER.

Gruß

Arnaud

3 „Gefällt mir“

Hallo @Arnaud,
ich bin erst jetzt dazu gekommen mir die Sache näher anzusehen. Das sieht ja alles sehr gut machbar aus. :+1:

Eine Frage habe ich allerdings doch: Die zusätzliche Datei "MYCSV.csv" muss ja aus Eurer Schulverwaltung stammen (länder- oder sogar schulspezifisch). Ich wüsste gerne, ob ich die Einträge, die bei Dir aus dieser Datei stammen, nicht auch direkt in der Datei teachers.csv mit einpflegen kann? Wenn ich das richtig sehe:

https://docs.linuxmuster.net/de/latest/user-management/manage-users/managewebui.html#pflege-der-lehrerdatei

sind doch hinter dem Feld für den Wunschlogin noch ein paar Felder frei: ;;;;;
Sind die für irgendwas reserviert oder könnte man die Datei auch direkt an dieser Stelle editieren und z.B. um die Felder Fächer und Kürzel ergänzen?

Viele Grüße,
Michael

Hallo Michael,

Die CSV Datei erzeuge ich selber (entweder Bash oder Python Skript) in meinen temporären Dateien. Die Liste von Kollegen / Fächer / Kürzel hat einen Stundenplaner mir einfach gegeben.

Es wäre natürlich cool das ganze in teachers.csv zu pflegen, aber ich weiss nicht, ob es machbar ist, das ist der Bereich von sophomorix, nicht meins.

Gruß

Arnaud

Ja - das ist genau das Problem:
Wenn ich das richtig sehe, klappt die Zuordnung der Lehrernamen ('sn') nicht mehr, wenn man die Datei "MYCSV.csv" manuell pflegt und da z.B. Nachnamen doppelt existieren oder welche fehlen, richtig?

Das war nur ein Beispiel, die Zuordnung kann beliebig anpassen, je nach Situation.

Da kannst du genauso ein Test schreiben in der Form:

for teacher in teachers:
    ldapname = f"{teacher['sn'].lower()};{teacher['givenName'].lower();}"
    csvname = f"{entry[0].lower()};{entry[1].lower()}" # oder entry[2], richtige Werte für die Spalten Name und Vorname
    if ldapname == csvname:
        # Do some stuff
        break
else:
    print(name, "not found")

Gruß

Arnaud

1 „Gefällt mir“