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?

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: true

Wie 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 header

Die 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