Überlegungen zum Thema "Source of Truth"

Hi Sucher,
Also nochmal zum Thema „Source of Truth“. Ja – im Prinzip geht das alles auf dem v7-Server aber eben nur im Prinzip:
Die Zugehörigkeit von Schülern zu Klassen ist implementiert; nicht aber die gesamte Obestufenstruktur (die natürlich ungleich komplizierter ist, da hier ja individuell gewählt wird). Es sind bei uns also in jedem Schuljahr ca 300 Oberstufenkurse vorhanden, die im Prinzip genauso wie Klassen aus einem Kurslehrer und den dazugehörigen Schülern bestehen. Natürlich könnte man das alles als Projekte anlegen lassen aber so ist es imho nicht gedacht. Wir gehen bei uns daher im Moment den Umweg, dass diese ganzen Kurse über CSV-Import bei moodle importiert werden. Das ist immer enorm aufwändig.
Daher wäre es natürlich elegant, wenn im keycloak auch die Kursstruktur der Oberstufen mit abgebildet werden könnte. Also mit zusätzlichen Attributen pro Schüler wie z.B.:

<JSON>
"groups": [
  "/Klassen/Q1",
  "/Kurse/MatheLK1",
  "/Kurse/PhysikGK2"
]

Wie auch schon im Parallelthread festgestellt, gilt jedoch leider:

Es gibt Plugins für Moodle, die OIDC oder SAML mit Keycloak integrieren. Einige können zusätzliche Claims wie Gruppen auslesen, aber eine vollständige automatische Kursverwaltung anhand von Keycloak-Gruppen gehört nicht zum Moodle-Standard. Häufig sind dafür Anpassungen oder zusätzliche Plugins nötig. (das war eine KI-Antwort!)

Interessanterweise schlägt die KI dann weiter vor:

Was ich für eine Schule empfehlen würde

Wenn du ohnehin Keycloak als zentrale Benutzerverwaltung aufbaust, würde ich Keycloak als „Single Source of Truth“ für Benutzer und Gruppenzugehörigkeiten nutzen.

Dann könnte ein kleines Synchronisationsprogramm:

  • die Gruppenstruktur aus Keycloak lesen,
  • fehlende Moodle-Kurse anlegen,
  • Schüler automatisch einschreiben,
  • Moodle-Gruppen aktualisieren,
  • und dasselbe für Nextcloud, Matrix oder andere Systeme erledigen.

Der Vorteil ist, dass jede Anwendung ihre eigene interne Struktur behält, aber alle aus derselben Quelle synchronisiert werden. Das ist deutlich robuster, als sich darauf zu verlassen, dass jede Anwendung OIDC-Gruppen identisch interpretiert.

Viele Grüße,
Michael

ja.. klar.. oberstufenkurse…
also ob du die jetzin keycloak einpgflegst oder ins AD ist ja gleich viel Abreit.. solange die Arbeit einmalig stattfindet, an einer stelle…
keycloak holt sich die gruppen ja vom lmn, also ist es sinnvoll dass die auch da reinkommen…
leider, und ich glaub das ist das grundproblem gibt es keine saubere datenstruktur fuer die oberstufe oder ueberhaupt jeglicher unterricht der nicht im klassenverband stattfindet…
und aus dem grund gibt es wohl auch keine skripte wie man das am besten macht…
bei uns ist es an der schule so dass die kollegen die zugehorigkeit der schueler im Elektronischen Tagebuch einpflegen muessen. Da sich die Kurszugehörigkeit selbst 2 wochen nach sjbeginn noch aendern kann… und das quasi fast nur die unterrichtende lehrkraft weiss wer da aufschlaegt und von wem die anwesenheit zu pruefen ist… ist das etb ein sinnvoller ort das zu pflegen…
Nur ist webuntis (das nutzen wird) relativ kacke wenn es um daten export geht… weil die daten auf midnestens 2 dateien verstreut verteilt sind wie die kurse heissen und welcher schueler welchem kurs zugeordnet ist… vielleicht ist das bessser wenn man ne andere loesung fuer das etb ist… das weiss ich nicht…

was die ki vorschlaegt haengt ein bissle davon ab was du zuvor gefragt hast… ich halte es nicht für sinnvoll keycloak als source of truth zu nehmen wenn du das ldap backend ja schon hast… und wenn du den login in keycloak per ldap machst hast du zwangsweise ldap da dranhaengen… und am pc ueber oidc einloggen ist mir nict bekannt dass das ginge…

Genau – das ist das Grundproblem … wir haben auch WebUntis und die Kollegen verstehen „natürlich nicht“, dass sie die Schüler bei WebUntis nochmal selbst in ihre Kurse holen müssen, während das auf den anderen Plattformen halbwegs automatisch läuft.
Im Laufe der Zeit habe ich mir ein paar Scripte gebastelt, die mir hier viel Arbeit abnehmen, da passende CSV-Files erzeugt werden. Diese müssen aber dann doch wieder manuell weiterverarbeitet werden. Richtig elegant ist das nicht – aber es funktioniert.

Hier nochmal der Querverweis zu der alten Lösung von @thoschi über die moodle-REST-API und hier nochmal die Diskussion zum Thema, die vor längerer Zeit hier schon mal lief…

Viele Grüße,
Michael

Hallo zusammen,

da wir da inzwischen wieder einiges weiter sind, ein wenig Input von meiner Seite:

  • lml7 als „source of truth“ funktioniert für uns aus verschiedenen Gründen schon länger nicht mehr. Wir sind da einfach bei der Hierarchisierung weiter und ich stimme Michael zu, dass zu vieles nicht abzubilden ist in linuxmuster (und ich fürchte, das liegt eben auch an den technischen Grundlagen, die zwar durch die API etwas handhabbarer werden, aber dennoch aus unserer Sicht zu viel Struktur festzurren, die nicht zur flexiblen Nutzung unserer Ideen passt (z.B. Listenlogik bei sophomorix!)
  • wir haben eine Menge Grips hinein gesteckt, was wir am flexibelsten füttern können. Und das ist ganz klar Keycloak. Kein Element unseres Systems bietet so viel Flexibilität für die strukturierte und produktunabhängige Informationssspeicherung. Klassen, Kurse, Jahrgangsstufen, Rollen, … wir haben inzwischen ALLES in Keycloak. Es stört keine App, die das nicht unterstützt. Und wir nutzen es einheitlich überall dort, WO etwas davon unterstützt wird.

Konkret haben wir unsere Skripte weiter entwickelt und das Ganze ist in eine Flask-Web-App gemündet, die inzwischen ungefähr folgendes macht:

  • Einlesen von CSVs, Transformieren von Inhalten (z.B. Ändern von Kursnamen, Ignorieren einzelner Kurse), abschließendes Schreiben in den Keycloak. Das ist so ungefähr das, was Sophomorix früher mal für unsere Schule war. CSV → strukturierte Daten in Keycloak
  • per Python gelangt man über eine einheitliche Zugriffsklasse an die Informationen in Keylcoak: man bekommt z.B. mit einem Python-Befehl „alle Lehrer des Schülers xyz“
  • ebenfalls in der App werden alle weiteren Dienste (Moodle, Nextcloud, …) per REST mit diesen Keycloak-Daten synchronisiert. Das läuft dieses Jahr vermutlich das erste Mal weitgehend produktiv
  • über eine Web-Schnittstelle können wir die Daten jeweils auch bearbeiten, z.B. Schüler in andere Kurse verschieben, Erstpassworte über eine eigene hemmelig-Instanz verschicken, uvm. Mit wenigen Knopfdrücken kann man das dann auch direkt in die Plattformen replizieren (idealerweise gelingt das irgendwann auch ohne IT-Admins)
  • technisch gibt es noch einen redis-Server als Zwischeninstanz, der das Arbeiten auf Keycloak und den anderen Plattformen repliziert und deutlich beschleunigt (1600 SuS in Moodle-Kurse zu packen, dauert; die Vorschau dazu oder andere Lesezugriffe bekommt man jetzt aber nach wenigen Sekunden)

Wir werden zweifefllos versuchen, auch den Zugriff auf Linuxmuster über die API in dieses System zu integrieren. Auch nutzt unser Keycloak derzeit noch die LDAP-Föderation (aus Keycloak-Sicht ist es ja egal, woher ein Nutzer kommt). Dennoch sehe ich kaum noch, wie und vor allem warum diese Komplexität in Linuxmuster als Quelle abgebildet werden sollte. Ich möchte an Linuxmuster (und Moodle und Nextcloud) so wenig wie möglich herumbasteln. In Keycloak Nutzer in Gruppen zu verschieben, tut erstmal niemandem weh, bis man dann synchronisiert.

Ich wünschte mir inzwischen, linuxmuster wäre strukturell etwas „offener“ - das heißt, es gäbe einfach einen Befehl, um einen Nutzer oder Rechner anzulegen, zu ändern oder zu löschen. Denn DAS brauchen wir oft und ist dann immer ein Schuss von hinten durch die Brust ins Auge.

Vor allem aber sehe ich die Bedeutung von LDAP und AD im Vergleich zu Webdiensten immer mehr schwinden. Mit Python/REST stehen uns hingegen alle Türen offen, die es so gibt. WENN es denn Türen gibt.

Damit auch abschließend zu WebUntis: es mag noch so sehr „Standard“ im Bereich Schule sein, aber was Schnittstellen angeht, ist es unverändert eine Vollkatastrophe. Und ich bezweifele, dass das „Zufall“ ist. Wir haben inzwischen Selenium-Wrapper geschrieben, die bestimmte Dinge bei Webuntis erledigen, weil es wirklich NUR einzeln mühsam zusammengeklickt werden darf (Bsp: Eltern-Schüler-Zuordnung bei bestehenden Schüleraccounts). Der Hersteller hat uns Besserung versprochen - warten wir es ab.

Viele Grüße
Thomas

Randnotiz: in den Doks oder einem Foreneintrag von webuntis fand ich mal, dass spezielle Schulen für Testzwecke Zugang zu API-Schnittstellen bekommen. Wisst ihr was davon bzw. hat das mal jemand probieren können?
Ich glaube da nicht wirklich dran, dass das eine saubere Sache wäre.

Ich (immernoch und vermutlich für immer alleine mit den Fragen an meiner Schule) habe bisher an der Abbildung in lmn7 festgehalten und die Oberstufenstruktur mit Projekten abgebildet. Hab ich ja mal irgendwo erzählt. Somit ist bei mir die LMN die source of truth.

Aber ich bin auch erst dabei einen keycloak aufzustellen. Eltern sollen in die LMN7.3/LMN7.4 gewandert sein. Mein Take ist, dass ich das nicht weiterentwickle bevor WebUntis nicht den Dachschaden mit dem manuellen Eintragen von Schülern in Kurse behoben hat oder eben die Zuordnung von Schüler:innen und Eltern.

Ich würde @thoschi Skripte und Verfahren sofort auch nutzen, so ist es nicht. Ich vermute weiterhin, dass eine Anpassung an andere Schulen aber Zeit braucht. (Wir haben keine Mails für Schüler z.b…)

P.S. schön von euch zu lesen / hören. Geht jemand von euch nach Esslingen? (@thoschi, du solltest mal als Dozent eingeladen werden (@AnGry ? @toheine ?) Sind dort noch Plätze frei?

Hallo @Tobias.
Ich habe auch schon daran gedacht, es so zu machen. Die entsprechenden Scripte, die aus den Untis-Dateien die Projekte erzeugen können, sind auch alle vorhanden und funktionieren. Dennoch ist der Weg vom Projekt zum Moodle Kurs ja nochmal ein etwas anderer. Daher mache ich das weiterhin über CSV Dateien, um die globalen Gruppen in die Kurse einzuschreiben :man_shrugging:t2::thinking:.

Viele Grüße
Michael

Das existiert bei mir durch python.
Grundlage sind alte lmlmoodle-skripte von Thomas.
Ein, zwei Jahre habe ich weiterentwickelt. Jetzt hoffe ich einfach, dass es noch so klappt.

Die Motivation schwand als klar war, dass bw.schule - Moodle kommt und die REST-API von Moodle dann nicht verwendet werden kann. (Kann sie? Ich vermute nicht. Wo käme das Land BW hin, wenn das ginge?)

Wir haben noch unser eigenes Moodle mit aus dem Grund - weil ich das Moodle mit meinen Skripten am Anfang des Schuljahres aus unserer LML mit DAten füttere.

Es ist ganz nützlich, wenn man solche Skripte hat, weil man dann auch mal spontan etwas generieren kann, wenn jemand „für jede TEilklasse alle Namen + Usernamen + generiertes einmaliges Passwort“ oder so ein Quatsch anfordert…

VG, Tobias

Hallo Thomas,

Die Entwicklung geht gerade in dieser Richtung, um ein System offener, flexibler und einfacher zu handeln, selbst wenn es noch viele Arbeit gibt.

@Tobias : falls du von Ende Oktober sprichst, werde ich auch dabei in Esslingen sein.
Ich würde mir auch wünschen, dass wir uns (auch mit @thoschi und alle die rund um LMN skripten) treffen um eure Erfahrungen zu sammeln :wink:

Gruß

Arnaud

Hallo zusammen,

aus meiner Sicht kann eigentlich nur ASV-BW die Single Source of Truth sein mit Ausnahme der Benutzernamen aus linuxmuster. Wir arbeiten aktuell so:

ASV => linuxmuster per CSV
ASV => WebUntis per CSV (Schüler, Eltern mit Konvertierungsskript)
ASV => WebUntis (Schülergruppen mit einem kleinen Tool zum Copy-Paste)
linuxmuster => WebUntis (nur Benutzernamen nachtragen)

Wichtig ist es, die ASV-ID in linuxmuster zu haben und die immer als Schlüssel zu verwenden, auch in WebUntis.

Andere Systeme sind derzeit nur per LDAP angekoppelt:

  • Moodle (eigene Instanz, nicht bei SCHULE@BW)
  • Nextcloud
  • E-Mail-System
  • Gitea (für Informatikunterricht)
  • MediaWiki (statt Schulportfolio)

Was uns fehlt, ist eine Abbildung der kompletten Struktur (Klassen/Lerngruppen) in Moodle (aktuell manuell) und E-Mail-System (nur wichtige Verteiler manuell). Bei Moodle ginge das prinzipiell über die REST-API. Ein entsprechendes, auf unsere Schule angepasstes Skript, hatte bislang aber noch keine sonderlich hohe Priorität.

Keycloak hätte ich auch gern, aber eher für SSO als für die komplette Struktur.

Viele Grüße
Matthias

Hallo Matthias!

Ich möchte dich fragen, wie du die Synchronisation
linuxmuster => WebUntis zum Nachtragen der Benutzernamen realisiert hast?

Und der Teil
ASV => WebUntis (Schülergruppen mit einem kleinen Tool zum Copy-Paste) -
welche Schülergruppen sind hier gemeint?

Danke.

Gruß - Rainer

Hallo Rainer,

aktuell läuft es per CSV wie folgt:

  1. ASV-BW => linuxmuster.net (neue Benutzer bekommen Benutzernamen)
  2. ASV-BW => WebUntis (ohne Benutzernamen)
  3. linuxmuster => WebUntis (nur ASV-ID und Benutzername)

Schritt 3 kann entfallen, wenn man sicher ist, dass keine neuen Benutzer erzeugt wurden. Das sieht man ja in Schritt 1.

Das ist aufwändig, lässt sich aber kaum anders lösen.

Mit den Schülergruppen meine ich die Teilgruppen (Sport, Religion, Ethik, NwT, IMP etc.). Da wir das Klassenbuch verwenden, müssen wir die akribisch in WebUntis führen. Für die Oberstufe läuft das anders. Da werden die Kurse in Untis verwaltet und von dort nach WebUntis exportiert. Aber für die Unter- und Mittelstufe ist es gruselig, da es keine wie auch immer geartete Importfunktion in WebUntis gibt. Man müsste also eigentlich alles von Hand klicken … Dafür haben wir inzwischen einen kleinen Hack, den ich in Kürze gern verfügbar machen kann.

Viele Grüße
Matthias

Hallo Matthias,

sehe ich das richtig, dass der einzige (?) Grund für diese Nutzung von CSV-Files in Deinem Fall der ist, dass Du auf diese Art die User bereits vor dem ersten eigenen Login mit dem richtigen Benutzernamen (also identisch zu dem im LDAP) bei WebUntis anlegen lassen kannst? Oder gibt es noch einen anderen Grund für Dein Vorgehen via CSV-Files? Wir haben den v7-Server per LDAP angebunden und sorgen zu Beginn des Schuljahres dafür, dass sich die neuen Schüler zuerst anmelden und erst dann der Import der (neuen) Eltern durchgeführt wird.
Viele Grüße,
Michael

Hallo Michael,

wir müssen ja die Stammdaten aus ASV-BW in WebUntis importieren, da beispielsweise auch Ein- und Austrittsdatum wichtig sind, und die sind nicht in linuxmuster gespeichert, das heißt, wir bekommen sie nicht per LDAP-Abfrage. Wie würde denn WebUntis einen Login den Stammdaten zuordnen, wenn wir den Benutzernamen nicht vorab hinterlegen? Vielleicht machen wir uns ja das Leben wirklich zu schwer. Die Zuordnung zwischen Schülern und Eltern nehmen wir nämlich über die ASV-ID vor.

Viele Grüße
Matthias

Also wir machen das so: Aus der Schulverwaltung kommt eine CSV-Datei mit diesem Header:

"Schueler-Identnummer";"Vorname";"Name";"Klasse";"Geb.Datum";"Geschlecht";"Verantw1";"E-Mail Verantw1";"Verantw2";"E-Mail Verantw2";"Eintrittsdatum"

Danach läuft der Import bei WebUntis mit diesem Profil:


(Das Tool der Schulverwaltung heißt in NDS „DaNiS“).
Damit werden die User schon mal richtig importiert doch die Accounts existieren noch nicht wirklich – das ist wirklich total blöd gemacht von WebUntis.
Aber wenn sich die „Neuen“ dann einmal per LDAP anmelden, erhalten sie ihr Konto unter ihrem Namen. Die Elternzuordnung funktioniert anschließend dann auch. Vielleicht reden wir hier auch einfach aneinander vorbei. Wir müssen leider auch auf CSV-Files zurückgreifen und können nicht einfach einen LDAP-Sync erzwingen. Eleganter wäre es ja, wenn man vielleicht künftig auf SSO per OpenID Connect oder SAML setzen würde. Ob es damit aber einfacher wird, weiß ich leider nicht. Nutzt das einer von Euch so?

btw: Wir sollten diesen Thread dann hier abschneiden und zum Thema WebUntis neu beginnen, meine ich…

Viele Grüße,
Michael

Hi Matthias,

um zu dem Thema zurückzukommen:

Das habe ich als python-skript → Moodle-REST-API implementiert (siehe oben)
für Email gab es mal ein skript linuxmuster-mailcow. Das hat sich entweder weiterentwickelt oder ist stecken geblieben, während Mailcow sich dazu unkompatibel weiterentwickelt hat.
Aber unser Dienstleister hat linuxmuster → mailcow so implementiert, dass ich weiterhin die Mailverteiler in mailcow zur Verfügung habe (muss ich noch testen, läuft momentan nicht produktiv)

Zurück zur Frage, was die „einzig wahre Datenquelle (ewDQ)“ sein könnte:

  1. Beim Ausführen des lmn->Moodle-Skripts muss man ja die Daten irgendwo holen, ich will diese Daten ja „live“ haben, d.h. instantan und bitte nicht über CSV aus der Datenquelle holen und ich weiß nichts davon, dass man die Daten sich aus ASV live holt. Vor allem nicht, wenn man nicht im per Netzbrief getrennten Verwaltungsnetz sitzt. Ich hatte die Diskussion mal mit dem Coder von AlekSiS. Klar kann man das technisch lösen und klar ist das ein Problem in BW und sonst vielleicht nirgends.
  2. Also warum meiner Ansicht nach nicht ASV als ewDQ? Weil dort
    a.) zu viele Infos drin stecken, die ich datensparsam wie ich gerne wäre, zunächst nicht möchte, z.B. Adresse der Eltern, Religionszugehörigkeit.
    b.) einige Infos nicht drin sind (username der lmn, evtl. Mailadresse d. SuS, Lehrer-Kontoinformationen) und ich meines Erachtens auch nicht die Gewalt über ASV hätte, das optional reinzupipen, selbst wenn ich das wollte.
    c.) ASV einfach mal nur BW und noch ein paar andere Länder ist.

Ich kann allerdings auch den Pragmatismus verstehen. Bei uns ist der Workflow der Verwaltung auch völlig scheuklappenartig auf ASV → Untis ausgelegt und wenn man die lmn nicht als Authentifizierung bräuchte, würde sie wohl auch rausfliegen. Ich finde aber weder ASV noch Untis besonders zuverlässig. Untis kein OpenSource, ASV ziemlich vernagelt. Flexibilität und Erweiterbarkeit ist Fehlanzeige.

  1. AlekSiS wäre vielleicht weiterhin als ewDQ denkbar, habe ich lange nicht mehr angeschaut
  2. @thoschi und seine Schule haben keycloak als ewDQ ausgewählt. Ich weiß auch zu wenig darüber, ob das meine Wahl wäre. ein tool - ein purpose. Und keycloak hat halt den purpose, authentifizierungsworkflows durchzuführen. Aber das ist vermutlich Ansichtssache.
  3. lmn als zentrale ewDQ zu nutzen finde ich charmant, weil sie sich gerade dorthin entwickelt, wo ich sie brauchen könnte: Elternkonten. Vielleicht kommen ja auch mal Schüler-Teilgruppen, die ich nicht als Projekte definieren muss. Immerhin ist die Lmn so flexibel, dass ich die Schüler-Teilgruppen (und Kursstufengruppen) dort abgebildete bekomme.
  4. was gegen die lmn spricht: wenn man die Macher von ASV und anderen Verwaltungsprogrammen dazu bringen will, dass sie ordentliche Schnittstellen zur Datenabfrage erstellen würden, dann hätte die CSV-Horrorshow endlich ein Ende. Aber für das Argument kann halt lmn als Basis nicht herhalten.

VG, Tobias

ja, warum nicht. Mich interessiert das als Dokumentation auch, was aktuell in WebUntis möglich und nötig ist.
Die Einrichtung der Schüler-ASV-ID als eindeutiges Merkmal haben wir über viel Suche und so ein internes Skript „GET_ID(…bla..bla)“ gepfriemelt. Keine Ahnung, ob das immer noch nötig ist. So was wäre halt interessantes Schwarmwissen.

Da ich von LLMs Abstand nehme, kann ich nur berichten, dass ask.linuxmuster.net mir fast immer geholfen habe, wenn ich ein Problem im Umfeld Schule per Suchmaschine lösen wollte. Das Forum hier ist fast schon systemrelevant.

Hallo Matthias,

ich bin zwar nicht Michael, aber wir machen es so, das wir die ASV-ID mit in die student.csv von linuxmuster schreiben (als fünftes Feld, hinter das Geburtsdatum), dann kann webuntis die zuordnung bei der Anmeldung über die ASV-ID machen.

Gruß

Sascha

jo die asvid sorgt fuer die zuordnung benutzer zu stammdaten.
wenn du aber ldap anmeldung haben willst muss auch der benutzername uebereinstimmen mit deinem ldapsystem. und da linuxmuster nie benutzernamen nochmals vergibt, auch wenn der benutzer schon ueber alle berge ist, gibts da auch keine probleme…
wenn man den oidc login nutzt, muss der benutzername zwar nicht uerbeinstimmen, aber dann muss man dann dafuer noch einen fremdbenutzernamen reinmachen der dann auch wieder mit dem einem Benutzerelemnt aus dem AD übereinstimmen muss.
Jetzt koennte man auf die Idee kommen eifach die ASV ID auch als Fremdbenutzername zu nehmen und das klappt glaub ich auch, aber dann kommt das naechste problem, dass die Lehrer ja keine ASV ID haben und dann muss man denen auch einen Fremdbenutzernamen extra eintragen… damit man die einstellung fuers gesamtsystem fahren kann..
also einfach ist es glaub nie…