02 – GeoServer
Modul addon_10_geoserver.sh, Funktionen install_addon_geoserver, install_addon_geoserver_mosaic und uninstall_addon_geoserver.
Was das Skript tut (Schritt für Schritt)
Das Modul erweitert die geteilte GeoServer-Instanz (Helm-Release geoserver-geoserver) additiv über die GeoServer-REST-API (https://geoportal.<domain>/geoserver/rest).
- Admin-Credentials lesen — aus dem Secret
geoserver-geoserver(Keysgeoserver-user/geoserver-password) im GeoData-Namespace. - Je Stage (
MAIN,DEVELOP,DE1,DE2,FV) werden über REST angelegt:- ein Namespace/Workspace (
main,dev,de1,de2,fv; URIurn:data-dna:govdata:<ws>) und - ein PostGIS-Datastore
<ws>_pg(Hostcentral-db.cc-prd-database-stack.svc.cluster.local:5432, Databasep2d2, Schemap2d2_<stage>, UserP2D2-<STAGE>). - FeatureTypes, Nutzer/Rollen und ACL-Regeln sind im Skript als TODO markiert (Sequenz aus den Automatisierungshinweisen nachziehen).
- ein Namespace/Workspace (
- GeoTIFF-Mosaic (
install_addon_geoserver_mosaic): legt im Workspacefriedhofsplaene(URIurn:data-dna:tiffdata) je Stadt-Unterordnersupplement/geotiffs/<stadt>/ein ImageMosaic an — Coveragestorefriedhofsplaene_<stadt>_mosaic, Coveragefriedhoefe_<stadt>(nativeCoverageName= Ordnername), plus ImageMosaic-Kernparameter (MergeBehavior FLAT,SUGGESTED_TILE_SIZE 512,512,FootprintBehavior Transparent,USE_JAI_IMAGEREAD true,RescalePixels true) und offene Lese-ACL (ROLE_ANONYMOUS,ROLE_AUTHENTICATED,ADMIN). Die GeoTIFFs werden perkubectl cpdirekt ins Pod-Data-Dir/opt/geoserver/data_dir/data/geotiffs/<stadt>/verteilt (am Ingress vorbei). Fehlt dergeotiffs-Ordner oder enthält er keine TIFFs, wird das Mosaic übersprungen (kein Fehler). - Rückbau: entfernt die Workspaces (
friedhofsplaene,fv,de2,de1,dev,main) perDELETE …/workspaces/<ws>?recurse=true, danach die physischen Raster-Dateien unterhalb vondata/geotiffs/(das Verzeichnis selbst bleibt) und schließlich allep2d2-geoserver-*-Secrets aus der früheren manuellen Einrichtung.
Entwicklungsstand (rudimentär): Die REST-Sequenz ist abgebildet, aber nicht idempotent (409-/201-Toleranz nur teilweise). FeatureTypes/Nutzer/Rollen/ACL sind TODO.
Ausgangslage (vorausgesetzt)
- Geteilte GeoServer-Instanz (Helm-Release
geoserver-geoserver) läuft im GeoData-Namespace, Admin-Secretgeoserver-geoserverist vorhanden. - PostgreSQL-Komponente (Modul 00) hat Schemata und Rollen je Stage bereits angelegt (Datastore verweist darauf).
- Optional:
supplement/geotiffs/<stadt>/mit GeoTIFFs für die Mosaic-Anlage.
Zielergebnis
Fünf Vektor-Workspaces (main, dev, de1, de2, fv) mit je einem PostGIS-Datastore, plus — sofern GeoTIFFs vorhanden — das kommunen-übergreifende ImageMosaic friedhofsplaene mit je einem Coveragestore/Coverage pro Stadt.
Manuelle Installation / Troubleshooting
Aus der früheren manuellen Installation (verifiziert, sechs Schritte):
- Workspaces/Namespaces (5) anlegen.
- PostGIS-Datastores (5) anlegen (Host/Schema/User je Stage,
dbtype=postgis,Expose primary keys=true). - FeatureTypes anlegen (25 = 5 je Workspace; Views
graeber/grabfluremitnativeNamev_graeber_aktuell/…). - Nutzer + Rollen anlegen und zuordnen.
- ACL-Layer-Regeln + Service-Regel setzen.
- Secrets für die GeoServer-Nutzer anlegen.
GeoTIFF-Mosaic (Friedhofspläne Köln): ImageMosaic im Workspace friedhofsplaene, Coveragestore friedhofsplaene_koeln_mosaic, Coverage friedhoefe_koeln; Style friedhofsplan_transparent als defaultStyle (Transparenz). Die REST-Referenz und die konkreten Aufrufe stehen in geoserver-automatisierungshinweise.md (ai-runs).
Bekannte Fallstricke
- Idempotenz:
POSTohne vorherige Existenz-Prüfung; 409/201 wird derzeit nur perlog_warn„toleriert", nicht sauber behandelt. kubectl cplegt das Zielverzeichnis nicht an → vorhermkdir -pim Pod (Turn 73).- Coveragestore-Body braucht explizit
workspace(coverageStore.workspace.name), sonst „Store must be part of a workspace" (Turn 74). - Mosaic-Kernparameter heißen
metadata(nichtparameters). - Rückbau-Löschung entfernt nur den Katalogeintrag, nicht die per
kubectl cpverteilten Raster-Dateien → zusätzlichrm -rf …/geotiffs/*(Verzeichnisgeotiffs/bleibt, es gehört zum GeoServer). - HTTP-Status separat auswerten (
curl -w "%{http_code}"), da 404 beicurlsonst fälschlich als Erfolg bzw. als roher Tomcat-HTML-Body ins Log läuft (Turn 72). - Ordner-Hierarchie
geotiffs/<stadt>/wird 1:1 abgebildet (je Stadt ein Unterordner → je Stadt ein Mosaic) — kein „magischer" Datenzugang (Turn 68/69).