Tenant Config
Introduction
Agenda
- Was ist das?
- Was ist es nicht?
- Wie kann ich es benutzen?
Was ist das?
- Zentrale Stelle, um Mandanten für Produkte zu verwalten und zu konfigurieren
- Eine Konfiguration ist eine Text-Datei (YAML)
- Jedes Produkt definiert ein "Schema", nur Felder aus dem Schema können definiert werden
- Man kann Templates anlegen für Produkt-Varianten
Was ist das?
- In KWS/KWH/.. haben wir sehr gute Erfahrungen damit gemacht, die Software "Mandanten-Agnostisch" zu bauen, z.B. Features heissen nicht
# BAD:
sendCopyToSparkasse: true
# BÄTTER:
sendDocumentCopyTo: marktfolge@sparkasse-musterhausen.de- Im Code sollten keine* Mandanten-Unterscheidungen gemacht werden, sondern Feature-Entscheidungen
// BAD:
if (tenant == "musterbank") {
musterBankSpezialfunktion();
}
// GOOD:
if (tenantConfig.skipVerificationStep) {
skipVerification();
}Was ist das?
- Extrem schnell (~), da zur Runtime keine Berechnung/Kompilation ausgeführt wird
- Durch die Hohe Geschwindigkeit müssen die Produkte ggf. keine Kopie der Konfigurationen vorhalten und können sie live abfragen
- Low Memory Footprint (~6 MB)
- Mandanten-Auswahl anhand von Name, BLZ oder URL
Was ist das nicht?
- Kein "Programm", Skriptsammlung zum kompilieren, NGINX mit LUA-Script zu Serven
- Keine UI
- Nicht für direkte Nutzung durch die Mandanten gemacht
Wie kann ich es benutzen?
- Projekt liegt unter https://gitlab.com/fino/switch/aid-config
- Für das eigene Produkt* unter "config/_products/myproduct.yml" ein Schema mit Default-Werten anlegen
schema:
### some special values
# optional, if you want to use the url-matching. this is a regex
hostnameToFindConfig: null
# optional, if you want to use blz matching
blz: null
# your own values
skipVerification: false- Config für Mandanten anlegen
parent: ../_products/myproduct
skipVerification: trueWie kann ich es benutzen?
- Ein Produkt ist ein fachliches Produkt, kein Software-Projekt, z.B. kws nicht papyrus
- Sowohl die Produkt als auch die Mandanten sollten kebab-case benannt werden
GET :8080/<product>/byName/<tenant>
-> return the tenant config for that tenant
GET :8080/<product>/byUrl/<url>
-> return the tenant config matching the given url
GET :8080/<product>/byBrc/<brc>
-> return the tenant config matching the given bank routing code
(German: Bankleitzahl)Wie kann ich es benutzen?
Um dem Frontend eine Config mitzugeben, kann ein Public Schema definiert werden
schema:
theme: bumblebee
public:
- file: config.json
schema:
theme: '$theme'
GET :8085/<product>/(.*)
-> returns the file $1 for <product>, choosing the tenant
by the X-Forwarded-Host headerDie Tenant-Config kann dann (intern) so:
Der Pfad kann also direkt im Ingress an die Config weitergereicht werden

In Progress
- Deployment ins k8s finalisieren
- Legal-Content als Quelle anschließen
- KWS final umstellen
Fragen?
Slack-Channel #tenantconfig-support
deck
By Patrick
deck
- 134