From bdcbd8a0a60b4a3ae2890e14f8dd80d357a8e4bc Mon Sep 17 00:00:00 2001 From: Irfan Date: Wed, 25 Sep 2024 09:47:13 +0100 Subject: [PATCH 01/18] Use hostPath when persistent vols are set to false --- geoserver/latest/templates/statefulset.yaml | 22 ++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index 8490000..a71d645 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -255,30 +255,42 @@ spec: {{- end }} {{- end }} volumes: - {{- if .Values.persistence.datadir }} - name: gs-datadir + {{- if .Values.persistence.datadir }} persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-datadir + {{ else }} + hostPath: + path: /var/geoserver/ {{- end }} - {{- if .Values.persistence.memdumps }} - name: gs-memdumps + {{- if .Values.persistence.memdumps }} persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-memdumps {{- end }} - {{- if .Values.persistence.logs }} - name: gs-logs + {{- if .Values.persistence.logs }} persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-logs + {{ else }} + hostPath: + path: /var/geoserver/ {{- end }} - {{- if .Values.persistence.tomcatlogs }} - name: gs-tomcatlogs + {{- if .Values.persistence.tomcatlogs }} persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-tomcatlogs + {{ else }} + hostPath: + path: /var/geoserver/ {{- end }} - {{- if .Values.persistence.audits }} - name: gs-audits + {{- if .Values.persistence.audits }} persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-audits + {{ else }} + hostPath: + path: /var/geoserver/ {{- end }} - name: context secret: From ad046e230f1f9b9cdd4ef4200d7e3e8a271d6fe2 Mon Sep 17 00:00:00 2001 From: Irfan Date: Wed, 25 Sep 2024 10:09:29 +0100 Subject: [PATCH 02/18] Don't mount datadir if persistence is off Let it use the default datadir location. This case always assumes datadir is burned in the image. --- geoserver/latest/templates/statefulset.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index a71d645..7381daf 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -51,8 +51,10 @@ spec: {{- end }} volumeMounts: + {{- if .Values.persistence.datadir }} - name: gs-datadir mountPath: /var/geoserver/datadir + {{- end }} - name: gs-memdumps mountPath: $(GEOSERVER_HEAP_DUMP_DIR) - name: gs-audits @@ -205,8 +207,10 @@ spec: mountPath: /usr/local/tomcat/conf/server.xml subPath: server.xml readOnly: true + {{- if .Values.persistence.datadir }} - name: gs-datadir mountPath: /var/geoserver/datadir + {{- end }} - name: gs-memdumps mountPath: /var/geoserver/memory_dumps - name: gs-audits @@ -255,13 +259,10 @@ spec: {{- end }} {{- end }} volumes: - - name: gs-datadir {{- if .Values.persistence.datadir }} + - name: gs-datadir persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-datadir - {{ else }} - hostPath: - path: /var/geoserver/ {{- end }} - name: gs-memdumps {{- if .Values.persistence.memdumps }} From 7c8e3e227869ec5bf059a1242c62d3e60f94ca09 Mon Sep 17 00:00:00 2001 From: Irfan Date: Tue, 1 Oct 2024 14:57:14 +0100 Subject: [PATCH 03/18] use subdirs for different hostpath --- geoserver/latest/templates/statefulset.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index 7381daf..47cdd2e 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -268,6 +268,9 @@ spec: {{- if .Values.persistence.memdumps }} persistentVolumeClaim: claimName: {{ include "geoserver.fullname" . }}-memdumps + {{ else }} + hostPath: + path: /var/geoserver/memdumps {{- end }} - name: gs-logs {{- if .Values.persistence.logs }} @@ -275,7 +278,7 @@ spec: claimName: {{ include "geoserver.fullname" . }}-logs {{ else }} hostPath: - path: /var/geoserver/ + path: /var/geoserver/logs {{- end }} - name: gs-tomcatlogs {{- if .Values.persistence.tomcatlogs }} @@ -283,7 +286,7 @@ spec: claimName: {{ include "geoserver.fullname" . }}-tomcatlogs {{ else }} hostPath: - path: /var/geoserver/ + path: /var/geoserver/tomcatlogs/ {{- end }} - name: gs-audits {{- if .Values.persistence.audits }} @@ -291,7 +294,7 @@ spec: claimName: {{ include "geoserver.fullname" . }}-audits {{ else }} hostPath: - path: /var/geoserver/ + path: /var/geoserver/audits {{- end }} - name: context secret: From 4c1f18f9f9d22648d326da3192667bb75749e295 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 10:59:34 +0000 Subject: [PATCH 04/18] Add HZ related conf --- .../jdbcconfig/cm-cluster_properties.yaml | 18 + .../jdbcconfig/cm-hazelcast_xml.yaml | 423 ++++++++++++++++++ .../jdbcconfig/svc-standalone-hz.yaml | 14 + geoserver/latest/templates/statefulset.yaml | 12 + 4 files changed, 467 insertions(+) create mode 100644 geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml create mode 100644 geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml create mode 100644 geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml diff --git a/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml b/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml new file mode 100644 index 0000000..6182e49 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cluster_properties +data: + cluster.properties: | + enabled = true + sync_method = event + sync_delay = 5 + session_sharing = true + session_sticky = false + acktimeout = 2000 + #Disabling the hazelcast shutdown hook + shutdown_hook_enable = false + #Setting the hazelcast logging type to log4j + logging_type = "log4j" + logger.com-hazelcast.name = com.hazelcast + logger.com-hazelcast.level = ERROR diff --git a/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml b/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml new file mode 100644 index 0000000..9df7663 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml @@ -0,0 +1,423 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hazelcast_xml +data: + hazelcast.xml: | + + + + + + + + + + geoserver-cluster1 + + + + + 5702 + + + + + + standalone-hz.default.svc.cluster.local + + + + + + + + 0 + 16 + true + + + 100 + 1 + 16 + true + + + 100 + 1 + 16 + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + true + + + true + + + + 0 + + 1 + + + 0 + + -1 + + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + + + tiered-store + + 4096 + 4 + 4 + + + + + BINARY + + + CREATE_ON_UPDATE + + + 1 + + 0 + + 0 + + 0 + + + + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + INDEX-ONLY + + + true + + + false + + + + + + + + + + + + + + + + 1 + SET + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + + OBJECT + true + true + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + + 1 + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + + 1 + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + + 10 + BLOCK + true + + + + 10000 + 1 + 0 + 0 + BINARY + com.hazelcast.spi.merge.PutIfAbsentMergePolicy + + + + + 100 + + 600000 + + 1514764800000 + + 0 + + 6 + + 16 + + 15000 + + true + + + + + 0 + + + + + + + 1 + 0 + HyperLogLogMergePolicy + + + + 1000 + 1 + + + + 2147483647 + true + + + + 0 + 0 + 300 + 5 + 14400 + false + 0 + + 2000 + 5000 + 5 + 100 + 10000 + 100 + 100 + + + + + + 5 + + + 5 + + + + 0 + false + + + + + 100 + + 1 + + 10000 + + false + + 9223372036854775807 + + + 1024 + + + 16384 + + + 3 + + + + diff --git a/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml b/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml new file mode 100644 index 0000000..645e6ee --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: standalone-hz + labels: + {{- include "geoserver.labels" . | nindent 4 }} +spec: + selector: + {{- include "geoserver.labels" . | nindent 4 }} + ports: + - protocol: TCP + port: 5702 + targetPort: 5702 + type: ClusterIP diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index 47cdd2e..aba2905 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -195,6 +195,12 @@ spec: resources: {{- toYaml .Values.resources | nindent 12 }} volumeMounts: + - name: cluster_properties + mountPath: /var/geoserver/datadir/cluster/cluster.properties + subPath: cluster.properties + - name: hazelcast_xml + mountPath: /var/geoserver/datadir/cluster/hazelcast.xml + subPath: hazelcast.xml - name: context mountPath: /usr/local/tomcat/conf/context.xml subPath: context.xml @@ -259,6 +265,12 @@ spec: {{- end }} {{- end }} volumes: + - name: cluster_properties + configMap: + name: cluster_properties + - name: hazelcast_xml + configMap: + name: hazelcast_xml {{- if .Values.persistence.datadir }} - name: gs-datadir persistentVolumeClaim: From 54bbf8b2cb4c0635c80ba84eb083b0765843755c Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 11:07:13 +0000 Subject: [PATCH 05/18] Add jdbcconfig related confs --- .../jdbcconfig/cm-jdbcconfig-enabled.yaml | 24 +++++++++++++++++++ .../jdbcconfig/cm-jdbcconfig-init-import.yaml | 24 +++++++++++++++++++ geoserver/latest/templates/statefulset.yaml | 6 +++++ 3 files changed, 54 insertions(+) create mode 100644 geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml create mode 100644 geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml new file mode 100644 index 0000000..f730011 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm-jdbcconfig-enabled +data: + jdbccfg.properties: | + initdb=false + import=false + enabled=true + username=docker + password=docker + jdbcUrl=jdbc\:postgresql\://postgis.db.svc.cluster.local\:5432/gis1 + pool.poolPreparedStatements=false + pool.testWhileIdle=false + pool.timeBetweenEvictionRunsMillis=-1L + pool.validationQuery=SELECT now() + pool.minIdle=4 + ignoreDirs=.git,data,jdbcstore,jdbcconfig,temp,tmp,logs,wps_data,cluster,gwc-layers + pool.maxOpenPreparedStatements=50 + driverClassName=org.postgresql.Driver + pool.maxActive=10 + initScript=jdbcconfig/scripts/initdb.postgres.sql + debugMode=false + pool.testOnBorrow=true \ No newline at end of file diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml new file mode 100644 index 0000000..9da99e3 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm-jdbcconfig-init-import +data: + jdbccfg.properties: | + initdb=true + import=true + enabled=true + username=docker + password=docker + jdbcUrl=jdbc\:postgresql\://postgis.db.svc.cluster.local\:5432/gis1 + pool.poolPreparedStatements=false + pool.testWhileIdle=false + pool.validationQuery=SELECT now() + pool.timeBetweenEvictionRunsMillis=-1L + pool.minIdle=4 + ignoreDirs=.git,data,jdbcstore,jdbcconfig,temp,tmp,logs,wps_data,cluster,gwc-layers + pool.maxOpenPreparedStatements=50 + driverClassName=org.postgresql.Driver + pool.maxActive=10 + initScript=jdbcconfig/scripts/initdb.postgres.sql + debugMode=true + pool.testOnBorrow=true \ No newline at end of file diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index aba2905..bf3d712 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -271,6 +271,12 @@ spec: - name: hazelcast_xml configMap: name: hazelcast_xml + - name: cm-jdbcconfig-init-import + configMap: + name: cm-jdbcconfig-init-import + - name: cm-jdbcconfig-enabled + configMap: + name: cm-jdbcconfig-enabled {{- if .Values.persistence.datadir }} - name: gs-datadir persistentVolumeClaim: From a58101919d49f6cb8724355cbe018504c804ba27 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 11:08:07 +0000 Subject: [PATCH 06/18] Bump up startup probe failureThreshold With jdbcconfig/jdbcstore import and HZ enabled, this will need to be increased. --- geoserver/latest/templates/statefulset.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index bf3d712..5292705 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -179,7 +179,7 @@ spec: httpGet: path: /geoserver/index.html port: http - failureThreshold: 36 + failureThreshold: 66 periodSeconds: 10 livenessProbe: httpGet: From 70faf7b34e34ad695ee25d11889c5510ad02f00b Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 11:50:13 +0000 Subject: [PATCH 07/18] Fix metadata names for configmaps --- .../templates/jdbcconfig/cm-cluster_properties.yaml | 2 +- .../templates/jdbcconfig/cm-hazelcast_xml.yaml | 2 +- geoserver/latest/templates/statefulset.yaml | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml b/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml index 6182e49..6e33e47 100644 --- a/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml +++ b/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: cluster_properties + name: cluster.properties data: cluster.properties: | enabled = true diff --git a/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml b/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml index 9df7663..41a8b41 100644 --- a/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml +++ b/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: hazelcast_xml + name: hazelcast.xml data: hazelcast.xml: | diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index 5292705..be077d6 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -195,10 +195,10 @@ spec: resources: {{- toYaml .Values.resources | nindent 12 }} volumeMounts: - - name: cluster_properties + - name: cluster.properties mountPath: /var/geoserver/datadir/cluster/cluster.properties subPath: cluster.properties - - name: hazelcast_xml + - name: hazelcast.xml mountPath: /var/geoserver/datadir/cluster/hazelcast.xml subPath: hazelcast.xml - name: context @@ -265,12 +265,12 @@ spec: {{- end }} {{- end }} volumes: - - name: cluster_properties + - name: cluster.properties configMap: - name: cluster_properties - - name: hazelcast_xml + name: cluster.properties + - name: hazelcast.xml configMap: - name: hazelcast_xml + name: hazelcast.xml - name: cm-jdbcconfig-init-import configMap: name: cm-jdbcconfig-init-import From 02e42c8f97299c2abc5915e87f28959c1465a043 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 11:54:42 +0000 Subject: [PATCH 08/18] Add JDBCConfig readme --- geoserver/latest/JDBCConfig_readme.md | 78 +++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 geoserver/latest/JDBCConfig_readme.md diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md new file mode 100644 index 0000000..9c2b991 --- /dev/null +++ b/geoserver/latest/JDBCConfig_readme.md @@ -0,0 +1,78 @@ +# Instructions + +Instructions to install GS with the JDBCConfig family of plugins: + +1. Install GS with plugins using our helm chart with following custom_values.yaml: + +Adjust the version in URL to match the GS version image that you use: + +```yaml +geoserver: + plugins: "https://build.geoserver.org/geoserver/2.26.x/ext-latest/geoserver-2.26-SNAPSHOT-wps-plugin.zip https://build.geoserver.org/geoserver/2.26.x/ext-latest/geoserver-2.26-SNAPSHOT-wps-cluster-hazelcast-plugin.zip https://build.geoserver.org/geoserver/2.26.x/community-latest/geoserver-2.26-SNAPSHOT-jdbcconfig-plugin.zip https://build.geoserver.org/geoserver/2.26.x/community-latest/geoserver-2.26-SNAPSHOT-jdbcstore-plugin.zip https://build.geoserver.org/geoserver/2.26.x/community-latest/geoserver-2.26-SNAPSHOT-hz-cluster-plugin.zip" +``` + +```sh +helm install geoserver . --values custom_values.yaml +``` + +2. Edit the configmap "cm-jdbcconfig-init-import" and ensure correct DB string and credentials: + +```sh +kubectl edit configmap/cm-jdbcconfig-init-import +``` + +3. Also ensure the same credentials are corrected for "cm-jdbcconfig-enabled": + +```sh +kubectl edit configmap/cm-jdbcconfig-enabled +``` + +4. Patch the geoserver statefulset to mount the "cm-jdbcconfig-init-import" configmap: + +```sh +kubectl patch statefulset geoserver --type='json' -p='[ + { + "op": "add", + "path": "/spec/template/spec/containers/0/volumeMounts/0", + "value": { + "name": "cm-jdbcconfig-init-import", + "mountPath": "/var/geoserver/datadir/jdbcconfig/jdbcconfig.properties", + "subPath": "jdbccfg.properties" + } + }, + { + "op": "add", + "path": "/spec/template/spec/containers/0/volumeMounts/1", + "value": { + "name": "cm-jdbcconfig-init-import", + "mountPath": "/var/geoserver/datadir/jdbcstore/jdbcstore.properties", + "subPath": "jdbccfg.properties" + } + } +]' +``` + +5. Let this GeoServer run, monitor the logs and wait for import to complete. + +```sh +kubectl logs -f statefulsets/geoserver +``` + +6. Patch the geoserver statefulset to use the "cm-jdbcconfig-enabled" configmap now: + +```sh +kubectl patch statefulset geoserver --type='json' -p='[ + { + "op": "replace", + "path": "/spec/template/spec/containers/0/volumeMounts/0/name", + "value": "cm-jdbcconfig-enabled" + }, + { + "op": "replace", + "path": "/spec/template/spec/containers/0/volumeMounts/1/name", + "value": "cm-jdbcconfig-enabled" + } +]' +``` + +7. Ensure geoserver is restarted \ No newline at end of file From 1c733cd3e6fd7d5730c0e5a262d60963193811af Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 11:59:51 +0000 Subject: [PATCH 09/18] Fix name in configmaps --- .../templates/jdbcconfig/cm-cluster_properties.yaml | 2 +- .../templates/jdbcconfig/cm-hazelcast_xml.yaml | 2 +- geoserver/latest/templates/statefulset.yaml | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml b/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml index 6e33e47..1a47714 100644 --- a/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml +++ b/geoserver/latest/templates/jdbcconfig/cm-cluster_properties.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: cluster.properties + name: cluster-properties data: cluster.properties: | enabled = true diff --git a/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml b/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml index 41a8b41..5d44750 100644 --- a/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml +++ b/geoserver/latest/templates/jdbcconfig/cm-hazelcast_xml.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: hazelcast.xml + name: hazelcast-xml data: hazelcast.xml: | diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index be077d6..9df2c09 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -195,10 +195,10 @@ spec: resources: {{- toYaml .Values.resources | nindent 12 }} volumeMounts: - - name: cluster.properties + - name: cluster-properties mountPath: /var/geoserver/datadir/cluster/cluster.properties subPath: cluster.properties - - name: hazelcast.xml + - name: hazelcast-xml mountPath: /var/geoserver/datadir/cluster/hazelcast.xml subPath: hazelcast.xml - name: context @@ -265,12 +265,12 @@ spec: {{- end }} {{- end }} volumes: - - name: cluster.properties + - name: cluster-properties configMap: - name: cluster.properties - - name: hazelcast.xml + name: cluster-properties + - name: hazelcast-xml configMap: - name: hazelcast.xml + name: hazelcast-xml - name: cm-jdbcconfig-init-import configMap: name: cm-jdbcconfig-init-import From d562f97582d58bc0cfe383ef8471f8f4a100bf1b Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 13:03:20 +0000 Subject: [PATCH 10/18] Edit patch command to use 1 replica during init --- geoserver/latest/JDBCConfig_readme.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md index 9c2b991..87f2419 100644 --- a/geoserver/latest/JDBCConfig_readme.md +++ b/geoserver/latest/JDBCConfig_readme.md @@ -27,7 +27,7 @@ kubectl edit configmap/cm-jdbcconfig-init-import kubectl edit configmap/cm-jdbcconfig-enabled ``` -4. Patch the geoserver statefulset to mount the "cm-jdbcconfig-init-import" configmap: +4. Patch the geoserver statefulset to mount the "cm-jdbcconfig-init-import" configmap and replicaCount is set to 1: ```sh kubectl patch statefulset geoserver --type='json' -p='[ @@ -48,6 +48,11 @@ kubectl patch statefulset geoserver --type='json' -p='[ "mountPath": "/var/geoserver/datadir/jdbcstore/jdbcstore.properties", "subPath": "jdbccfg.properties" } + }, + { + "op": "replace", + "path": "/spec/replicas", + "value": 1 } ]' ``` From 04a5cbf7812ae538acd64bb7e98a49537374cb2c Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 13:09:54 +0000 Subject: [PATCH 11/18] Mount the jdbcstore and jdbcconfig init_db scripts This is required when datadir persistence will be disabled as the plugin will not create the scripts folder if jdbcconfig/jdbcstore configs are mounted manually. --- .../jdbcconfig/jdbcconfig-scripts.yaml | 1434 +++++++++++++++++ .../jdbcconfig/jdbcstore-scripts.yaml | 54 + geoserver/latest/templates/statefulset.yaml | 10 + 3 files changed, 1498 insertions(+) create mode 100644 geoserver/latest/templates/jdbcconfig/jdbcconfig-scripts.yaml create mode 100644 geoserver/latest/templates/jdbcconfig/jdbcstore-scripts.yaml diff --git a/geoserver/latest/templates/jdbcconfig/jdbcconfig-scripts.yaml b/geoserver/latest/templates/jdbcconfig/jdbcconfig-scripts.yaml new file mode 100644 index 0000000..037f498 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/jdbcconfig-scripts.yaml @@ -0,0 +1,1434 @@ +apiVersion: v1 +data: + dropdb.h2.sql: | + DROP VIEW IF EXISTS service; + DROP VIEW IF EXISTS settings; + DROP VIEW IF EXISTS global; + DROP VIEW IF EXISTS layergroup_style; + DROP VIEW IF EXISTS layergroup_layer; + DROP VIEW IF EXISTS layergroup; + DROP VIEW IF EXISTS layer_style; + DROP VIEW IF EXISTS layer; + DROP VIEW IF EXISTS style; + DROP VIEW IF EXISTS wmslayer; + DROP VIEW IF EXISTS wmsstore; + DROP VIEW IF EXISTS wmtslayer; + DROP VIEW IF EXISTS wmtsstore; + DROP VIEW IF EXISTS coverage; + DROP VIEW IF EXISTS coveragestore; + DROP VIEW IF EXISTS featuretype; + DROP VIEW IF EXISTS datastore; + DROP VIEW IF EXISTS workspace; + + ? ALTER TABLE object_property DROP CONSTRAINT fk_object_property; + ? ALTER TABLE property_type DROP CONSTRAINT fk_type_property_type; + ? ALTER TABLE object DROP CONSTRAINT fk_object_type; + ? ALTER TABLE property_type DROP CONSTRAINT fk_property_type_target_property; + ? ALTER TABLE object_property DROP CONSTRAINT fk_object_property_property_type; + + DROP TABLE object IF EXISTS; + DROP TABLE object_property IF EXISTS; + DROP TABLE type IF EXISTS; + DROP TABLE property_type IF EXISTS; + DROP TABLE default_object IF EXISTS; + dropdb.mssql.sql: | + ALTER TABLE OBJECT_PROPERTY DROP CONSTRAINT FK_OBJECT_PROPERTY; + ALTER TABLE PROPERTY_TYPE DROP CONSTRAINT FK_TYPE_PROPERTY_TYPE; + ALTER TABLE OBJECT DROP CONSTRAINT FK_OBJECT_TYPE; + ALTER TABLE PROPERTY_TYPE DROP CONSTRAINT FK_PROPERTY_TYPE_TARGET_PROPERTY; + ALTER TABLE OBJECT_PROPERTY DROP CONSTRAINT FK_OBJECT_PROPERTY_PROPERTY_TYPE; + DROP TABLE OBJECT; + DROP TABLE OBJECT_PROPERTY; + DROP TABLE TYPE; + DROP TABLE PROPERTY_TYPE; + DROP TABLE DEFAULT_OBJECT; + dropdb.mysql.sql: | + ALTER TABLE OBJECT_PROPERTY DROP FOREIGN KEY FK_OBJECT_PROPERTY; + ALTER TABLE PROPERTY_TYPE DROP FOREIGN KEY FK_TYPE_PROPERTY_TYPE; + ALTER TABLE OBJECT DROP FOREIGN KEY FK_OBJECT_TYPE; + ALTER TABLE PROPERTY_TYPE DROP FOREIGN KEY FK_PROPERTY_TYPE_TARGET_PROPERTY; + ALTER TABLE OBJECT_PROPERTY DROP FOREIGN KEY FK_OBJECT_PROPERTY_PROPERTY_TYPE; + DROP TABLE IF EXISTS OBJECT; + DROP TABLE IF EXISTS OBJECT_PROPERTY; + DROP TABLE IF EXISTS TYPE; + DROP TABLE IF EXISTS PROPERTY_TYPE; + DROP TABLE IF EXISTS DEFAULT_OBJECT; + dropdb.oracle.sql: | + DROP VIEW service; + DROP VIEW settings; + DROP VIEW global; + DROP VIEW layergroup_style; + DROP VIEW layergroup_layer; + DROP VIEW layergroup; + DROP VIEW layer_style; + DROP VIEW layer; + DROP VIEW style; + DROP VIEW wmslayer; + DROP VIEW wmsstore; + DROP VIEW coverage; + DROP VIEW coveragestore; + DROP VIEW featuretype; + DROP VIEW datastore; + DROP VIEW workspace; + + DROP TABLE OBJECT CASCADE CONSTRAINTS; + DROP TABLE OBJECT_PROPERTY CASCADE CONSTRAINTS; + DROP TABLE TYPE CASCADE CONSTRAINTS; + DROP TABLE PROPERTY_TYPE CASCADE CONSTRAINTS; + DROP TABLE DEFAULT_OBJECT CASCADE CONSTRAINTS; + DROP SEQUENCE SEQ_OBJECT; + DROP SEQUENCE SEQ_TYPE; + DROP SEQUENCE SEQ_PROPERTY_TYPE; + dropdb.postgres.sql: | + DROP VIEW IF EXISTS service; + DROP VIEW IF EXISTS settings; + DROP VIEW IF EXISTS global; + DROP VIEW IF EXISTS layergroup_style; + DROP VIEW IF EXISTS layergroup_layer; + DROP VIEW IF EXISTS layergroup; + DROP VIEW IF EXISTS layer_style; + DROP VIEW IF EXISTS layer; + DROP VIEW IF EXISTS style; + DROP VIEW IF EXISTS wmslayer; + DROP VIEW IF EXISTS wmsstore; + DROP VIEW IF EXISTS wmtslayer; + DROP VIEW IF EXISTS wmtsstore; + DROP VIEW IF EXISTS coverage; + DROP VIEW IF EXISTS coveragestore; + DROP VIEW IF EXISTS featuretype; + DROP VIEW IF EXISTS datastore; + DROP VIEW IF EXISTS workspace; + + ? ALTER TABLE object_property DROP CONSTRAINT fk_object_property; + ? ALTER TABLE property_type DROP CONSTRAINT fk_type_property_type; + ? ALTER TABLE object DROP CONSTRAINT fk_object_type; + ? ALTER TABLE property_type DROP CONSTRAINT fk_property_type_target_property; + ? ALTER TABLE object_property DROP CONSTRAINT fk_object_property_property_type; + + DROP TABLE IF EXISTS object CASCADE; + DROP TABLE IF EXISTS object_property CASCADE; + DROP TABLE IF EXISTS type CASCADE; + DROP TABLE IF EXISTS property_type CASCADE; + DROP TABLE IF EXISTS default_object CASCADE; + initdb.h2.sql: "-- tables\nCREATE TABLE OBJECT (\n oid int GENERATED BY DEFAULT + AS IDENTITY, \n type_id int NOT NULL, \n id varchar(255) NOT NULL, \n blob + text NOT NULL,\n PRIMARY KEY (OID)\n);\n\nCREATE TABLE OBJECT_PROPERTY (\n oid + int NOT NULL, \n property_type int NOT NULL, \n id varchar(255) NOT NULL, \n + \ related_oid int, \n related_property_type int, \n colindex int NOT NULL, \n + \ value varchar(1023), \n PRIMARY KEY (oid, property_type, colindex)\n);\n\nCREATE + TABLE type (\n oid int GENERATED BY DEFAULT AS IDENTITY, \n typename varchar(255) + NOT NULL, \n PRIMARY KEY (oid)\n);\n\nCREATE TABLE property_type (\n oid int + GENERATED BY DEFAULT AS IDENTITY, \n target_property int, \n type_id int NOT + NULL, \n name varchar(255) NOT NULL, \n collection bit NOT NULL, \n text bit + NOT NULL, \n PRIMARY KEY (oid)\n);\n\nCREATE TABLE default_object (\n def_key + varchar(255) NOT NULL, \n id varchar(255) NOT NULL\n);\n\n-- foriegn keys\nALTER + TABLE object_property ADD CONSTRAINT \n fk_object_property FOREIGN KEY (oid) + REFERENCES object (oid) ON DELETE CASCADE;\n \nALTER TABLE property_type ADD + CONSTRAINT \n fk_type_property_type FOREIGN KEY (type_id) REFERENCES type (oid);\n + \ \nALTER TABLE object ADD CONSTRAINT \n FK_OBJECT_TYPE FOREIGN KEY (TYPE_ID) + REFERENCES TYPE (OID);\n \nALTER TABLE property_type ADD CONSTRAINT \n fk_property_type_target_property + FOREIGN KEY (target_property) REFERENCES property_type (oid);\n \nALTER TABLE + object_property ADD CONSTRAINT \n fk_object_property_property_type FOREIGN KEY + (property_type) REFERENCES property_type (oid);\n\n-- indexes\nCREATE UNIQUE INDEX + object_oid_idx ON object (oid);\nCREATE INDEX object_type_id_idx ON object (type_id);\nCREATE + UNIQUE INDEX object_id_idx ON object (id);\n\nCREATE INDEX object_property_oid_idx + ON object_property (oid);\nCREATE INDEX object_property_property_type_idx ON object_property + (property_type);\nCREATE INDEX object_property_id_idx ON object_property (id);\nCREATE + INDEX object_property_related_oid_idx ON object_property (related_oid);\nCREATE + INDEX object_property_related_property_type_idx ON object_property (related_property_type);\nCREATE + INDEX object_property_colindex_idx ON object_property (colindex);\nCREATE INDEX + object_property_value_idx ON object_property (value);\n\nCREATE UNIQUE INDEX type_oid_idx + ON type (oid);\nCREATE UNIQUE INDEX type_typename_idx ON type (typename);\n\nCREATE + UNIQUE INDEX property_type_oid_idx ON property_type (oid);\nCREATE INDEX property_type_target_property_idx + ON property_type (target_property);\nCREATE INDEX property_type_type_id_idx ON + property_type (type_id);\nCREATE INDEX property_type_name_idx ON property_type + (name);\nCREATE INDEX property_type_collection_idx ON property_type (collection);\n\nCREATE + UNIQUE INDEX default_object_def_key_idx ON default_object (def_key);\nCREATE INDEX + default_object_id_idx ON default_object (id);\n\n-- views - note these views are + not used at all in code\n-- workspace view \nCREATE VIEW workspace AS\nSELECT + a.oid, \n a.id, \n (SELECT c.value \n FROM object_property + c, property_type d \n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'name') as name, \n (SELECT e.value\n FROM + object_property e, property_type f\n WHERE e.property_type = f.oid\n AND + e.oid = (SELECT g.oid \n FROM object_property g, property_type + h \n WHERE g.property_type = h.oid\n AND + g.value = (SELECT i.value\n FROM object_property + i, property_type j\n WHERE i.oid = a.oid\n + \ AND i.property_type = j.oid\n AND + j.name = 'name')\n AND h.name = 'prefix')\n AND + f.name = 'URI') as uri\n FROM object a, type b\n WHERE a.type_id = b.oid\n AND + b.typename = 'org.geoserver.catalog.WorkspaceInfo'; \n \n-- datastore view\nCREATE + VIEW datastore AS\nSELECT a.oid, \n a.id,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'name') as name,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'description') + as description,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'type') as type,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'workspace.id') + workspace\n FROM object a, type b \n WHERE a.type_id = b.oid\n AND b.typename + = 'org.geoserver.catalog.DataStoreInfo';\n\n-- feature type view\nCREATE VIEW + featuretype AS\nSELECT a.oid, \n a.id,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'name') as name,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'nativeName') + as native_name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'prefixedName') as prefixed_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'title') as title,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'abstract') + as abstract,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'SRS') as srs,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'projectionPolicy') as projection_policy,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'enabled') + as enabled,\n (SELECT c.related_oid\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.FeatureTypeInfo';\n\n-- + coveragestore view\nCREATE VIEW coveragestore AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'description') as description,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'type') as type,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'enabled') + as enabled,\n (SELECT c.related_oid\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'workspace.id') workspace\n FROM object a, type b \n WHERE a.type_id + = b.oid\n AND b.typename = 'org.geoserver.catalog.CoverageStoreInfo';\n\n-- + coverage view\nCREATE VIEW coverage AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.CoverageInfo';\n\n-- + wmsstore view\nCREATE VIEW wmsstore AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'description') as description,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'capabilitiesURL') as capabilities_url,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'type') as type,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMSStoreInfo';\n\n-- + wms layer view\nCREATE VIEW wmslayer AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMSLayerInfo';\n\n-- + wmtsstore view\nCREATE VIEW wmtsstore AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'description') as description,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'capabilitiesURL') as capabilities_url,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'type') as type,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMTSStoreInfo';\n\n-- + wmts layer view\nCREATE VIEW wmtslayer AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMTSLayerInfo';\n\n-- + style view\nCREATE VIEW style AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'filename') as filename,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.StyleInfo';\n\n-- + layer view\nCREATE VIEW layer AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'title') as title,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'type') as type,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'enabled') as enabled,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'defaultStyle.id') default_style,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'resource.id') resource\n FROM object a, type b \n WHERE a.type_id = b.oid\n + \ AND b.typename = 'org.geoserver.catalog.LayerInfo';\n\n-- layergroup styles\nCREATE + VIEW layer_style AS\nSELECT a.oid, b.related_oid as style\n FROM object a, object_property + b, property_type c, type d \n WHERE a.oid = b.oid \n AND a.type_id = d.oid\n + \ AND b.property_type = c.oid\n AND c.name = 'styles.id'\n AND d.typename + = 'org.geoserver.catalog.LayerInfo';\n\n-- layer group view\nCREATE VIEW layergroup + AS\nSELECT a.oid, \n a.id,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'name') as name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'title') as title,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'abstract') + as abstract,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'mode') as mode,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'workspace.id') workspace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.LayerGroupInfo';\n\n-- + layergroup layers\nCREATE VIEW layergroup_layer AS\nSELECT a.oid, b.related_oid + as layer\n FROM object a, object_property b, property_type c, type d \n WHERE + a.oid = b.oid \n AND a.type_id = d.oid\n AND b.property_type = c.oid\n AND + c.name = 'layers.id'\n AND d.typename = 'org.geoserver.catalog.LayerGroupInfo';\n + \ \n-- layergroup styles\nCREATE VIEW layergroup_style AS\nSELECT a.oid, b.related_oid + as style\n FROM object a, object_property b, property_type c, type d \n WHERE + a.oid = b.oid \n AND a.type_id = d.oid\n AND b.property_type = c.oid\n AND + c.name = 'styles.id'\n AND d.typename = 'org.geoserver.catalog.LayerGroupInfo';\n\n-- + global view\nCREATE VIEW global AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'featureTypeCacheSize') + as feature_type_cache_size,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'globalServices') as global_services,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'xmlPostRequestLogBufferSize') + as xml_post_request_log_buffer_size,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'updateSequence') as update_sequence,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'settings.id') as settings\n FROM object a, type b \n WHERE a.type_id = b.oid\n + \ AND b.typename = 'org.geoserver.config.GeoServerInfo';\n\n-- settings view\nCREATE + VIEW settings AS\nSELECT a.oid,\n a.id,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'title') as title,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'charset') + as charset,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'verbose') as verbose,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'verboseExceptions') as verbose_exceptions,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'numDecimals') as num_decimals,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'onlineResource') as online_resource,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'proxyBaseUrl') + as proxy_base_url,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'schemaBaseUrl') as schema_base_url,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'workspace.id') as workspace\n FROM object a, type b \n WHERE a.type_id = b.oid\n + \ AND b.typename = 'org.geoserver.config.SettingsInfo';\n\n-- service view\nCREATE + VIEW service AS\nSELECT a.oid, \n a.id,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'name') as name,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'title') + as title,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'abstract') as abstract,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'maintainer') as maintainer,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'verbose') + as verbose,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'citeCompliant') as cite_compliant,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'outputStrategy') as output_strategy,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'onlineResource') as online_resource,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'schemaBaseURL') as schema_base_url,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'enabled') as enabled,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'workspace.id') as workspace\n FROM object a, + type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.config.ServiceInfo';\n" + initdb.mssql.sql: | + CREATE TABLE OBJECT (OID int IDENTITY NOT NULL, TYPE_ID int NOT NULL, ID varchar(255) NOT NULL, BLOB text NOT NULL, PRIMARY KEY (OID)); + CREATE TABLE OBJECT_PROPERTY (OID int NOT NULL, PROPERTY_TYPE int NOT NULL, ID varchar(255) NOT NULL, RELATED_OID int NULL, RELATED_PROPERTY_TYPE int NULL, COLINDEX int NOT NULL, VALUE varchar(max) NULL, PRIMARY KEY (OID, PROPERTY_TYPE, COLINDEX)); + CREATE TABLE TYPE (OID int IDENTITY NOT NULL, TYPENAME varchar(255) NOT NULL, PRIMARY KEY (OID)); + CREATE TABLE PROPERTY_TYPE (OID int IDENTITY NOT NULL, TARGET_PROPERTY int NULL, TYPE_ID int NOT NULL, NAME varchar(255) NOT NULL, COLLECTION bit NOT NULL, TEXT bit NOT NULL, PRIMARY KEY (OID)); + CREATE TABLE DEFAULT_OBJECT (DEF_KEY varchar(255) NOT NULL, ID varchar(255) NOT NULL); + ALTER TABLE OBJECT_PROPERTY ADD CONSTRAINT FK_OBJECT_PROPERTY FOREIGN KEY (OID) REFERENCES OBJECT (OID) ON DELETE Cascade; + ALTER TABLE PROPERTY_TYPE ADD CONSTRAINT FK_TYPE_PROPERTY_TYPE FOREIGN KEY (TYPE_ID) REFERENCES TYPE (OID); + ALTER TABLE OBJECT ADD CONSTRAINT FK_OBJECT_TYPE FOREIGN KEY (TYPE_ID) REFERENCES TYPE (OID); + ALTER TABLE PROPERTY_TYPE ADD CONSTRAINT FK_PROPERTY_TYPE_TARGET_PROPERTY FOREIGN KEY (TARGET_PROPERTY) REFERENCES PROPERTY_TYPE (OID); + ALTER TABLE OBJECT_PROPERTY ADD CONSTRAINT FK_OBJECT_PROPERTY_PROPERTY_TYPE FOREIGN KEY (PROPERTY_TYPE) REFERENCES PROPERTY_TYPE (OID); + CREATE UNIQUE INDEX OBJECT_OID ON OBJECT (OID); + CREATE INDEX OBJECT_TYPE_ID ON OBJECT (TYPE_ID); + CREATE UNIQUE INDEX OBJECT_ID ON OBJECT (ID); + CREATE INDEX OBJECT_PROPERTY_OID ON OBJECT_PROPERTY (OID); + CREATE INDEX OBJECT_PROPERTY_PROPERTY_TYPE ON OBJECT_PROPERTY (PROPERTY_TYPE); + CREATE INDEX OBJECT_PROPERTY_ID ON OBJECT_PROPERTY (ID); + CREATE INDEX OBJECT_PROPERTY_RELATED_OID ON OBJECT_PROPERTY (RELATED_OID); + CREATE INDEX OBJECT_PROPERTY_RELATED_PROPERTY_TYPE ON OBJECT_PROPERTY (RELATED_PROPERTY_TYPE); + CREATE INDEX OBJECT_PROPERTY_COLINDEX ON OBJECT_PROPERTY (COLINDEX); + CREATE INDEX OBJECT_PROPERTY_VALUE ON OBJECT_PROPERTY (VALUE); + CREATE UNIQUE INDEX TYPE_OID ON TYPE (OID); + CREATE UNIQUE INDEX TYPE_TYPENAME ON TYPE (TYPENAME); + CREATE UNIQUE INDEX PROPERTY_TYPE_OID ON PROPERTY_TYPE (OID); + CREATE INDEX PROPERTY_TYPE_TARGET_PROPERTY ON PROPERTY_TYPE (TARGET_PROPERTY); + CREATE INDEX PROPERTY_TYPE_TYPE_ID ON PROPERTY_TYPE (TYPE_ID); + CREATE INDEX PROPERTY_TYPE_NAME ON PROPERTY_TYPE (NAME); + CREATE INDEX PROPERTY_TYPE_COLLECTION ON PROPERTY_TYPE (COLLECTION); + CREATE UNIQUE INDEX DEFAULT_OBJECT_DEF_KEY ON DEFAULT_OBJECT (DEF_KEY); + CREATE INDEX DEFAULT_OBJECT_ID ON DEFAULT_OBJECT (ID); + initdb.mysql.sql: | + CREATE TABLE OBJECT (OID int(11) NOT NULL AUTO_INCREMENT, TYPE_ID int(11) NOT NULL, ID varchar(255) NOT NULL, BLOB text NOT NULL, PRIMARY KEY (OID), UNIQUE INDEX (OID), INDEX (TYPE_ID), UNIQUE INDEX (ID)); + CREATE TABLE OBJECT_PROPERTY (OID int(11) NOT NULL, PROPERTY_TYPE int(11) NOT NULL, ID varchar(255) NOT NULL, RELATED_OID int(11), RELATED_PROPERTY_TYPE int(11), COLINDEX int(11) NOT NULL, VALUE varchar(1023), PRIMARY KEY (OID, PROPERTY_TYPE, COLINDEX), INDEX (OID), INDEX (PROPERTY_TYPE), INDEX (ID), INDEX (RELATED_OID), INDEX (RELATED_PROPERTY_TYPE), INDEX (COLINDEX), INDEX (VALUE)); + CREATE TABLE TYPE (OID int(11) NOT NULL AUTO_INCREMENT, TYPENAME varchar(255) NOT NULL, PRIMARY KEY (OID), UNIQUE INDEX (OID), UNIQUE INDEX (TYPENAME)); + CREATE TABLE PROPERTY_TYPE (OID int(11) NOT NULL AUTO_INCREMENT, TARGET_PROPERTY int(11), TYPE_ID int(11) NOT NULL, NAME varchar(255) NOT NULL, COLLECTION tinyint(1) NOT NULL, TEXT tinyint(1) NOT NULL, PRIMARY KEY (OID), UNIQUE INDEX (OID), INDEX (TARGET_PROPERTY), INDEX (TYPE_ID), INDEX (NAME), INDEX (COLLECTION)); + CREATE TABLE DEFAULT_OBJECT (DEF_KEY varchar(255) NOT NULL, ID varchar(255) NOT NULL, UNIQUE INDEX (DEF_KEY), INDEX (ID)); + ALTER TABLE OBJECT_PROPERTY ADD INDEX FK_OBJECT_PROPERTY (OID), ADD CONSTRAINT FK_OBJECT_PROPERTY FOREIGN KEY (OID) REFERENCES OBJECT (OID) ON DELETE Cascade; + ALTER TABLE PROPERTY_TYPE ADD INDEX FK_TYPE_PROPERTY_TYPE (TYPE_ID), ADD CONSTRAINT FK_TYPE_PROPERTY_TYPE FOREIGN KEY (TYPE_ID) REFERENCES TYPE (OID); + ALTER TABLE OBJECT ADD INDEX FK_OBJECT_TYPE (TYPE_ID), ADD CONSTRAINT FK_OBJECT_TYPE FOREIGN KEY (TYPE_ID) REFERENCES TYPE (OID); + ALTER TABLE PROPERTY_TYPE ADD INDEX FK_PROPERTY_TYPE_TARGET_PROPERTY (TARGET_PROPERTY), ADD CONSTRAINT FK_PROPERTY_TYPE_TARGET_PROPERTY FOREIGN KEY (TARGET_PROPERTY) REFERENCES PROPERTY_TYPE (OID); + ALTER TABLE OBJECT_PROPERTY ADD INDEX FK_OBJECT_PROPERTY_PROPERTY_TYPE (PROPERTY_TYPE), ADD CONSTRAINT FK_OBJECT_PROPERTY_PROPERTY_TYPE FOREIGN KEY (PROPERTY_TYPE) REFERENCES PROPERTY_TYPE (OID); + initdb.oracle.sql: | + CREATE SEQUENCE seq_OBJECT; + CREATE SEQUENCE seq_TYPE; + CREATE SEQUENCE seq_PROPERTY_TYPE; + CREATE TABLE OBJECT (OID number(10) NOT NULL, TYPE_ID number(10) NOT NULL, ID varchar2(255) NOT NULL, BLOB clob NOT NULL, PRIMARY KEY (OID)); + CREATE TABLE OBJECT_PROPERTY (OID number(10) NOT NULL, PROPERTY_TYPE number(10) NOT NULL, ID varchar2(255) NOT NULL, RELATED_OID number(10), RELATED_PROPERTY_TYPE number(10), COLINDEX number(10) NOT NULL, VALUE varchar2(1023), PRIMARY KEY (OID, PROPERTY_TYPE, COLINDEX)); + CREATE TABLE TYPE (OID number(10) NOT NULL, TYPENAME varchar2(255) NOT NULL, PRIMARY KEY (OID)); + CREATE TABLE PROPERTY_TYPE (OID number(10) NOT NULL, TARGET_PROPERTY number(10), TYPE_ID number(10) NOT NULL, NAME varchar2(255) NOT NULL, COLLECTION number(1) NOT NULL, TEXT number(1) NOT NULL, PRIMARY KEY (OID)); + CREATE TABLE DEFAULT_OBJECT (DEF_KEY varchar2(255) NOT NULL, ID varchar2(255) NOT NULL); + ALTER TABLE OBJECT_PROPERTY ADD CONSTRAINT FK_OBJECT_PROPERTY FOREIGN KEY (OID) REFERENCES OBJECT (OID) ON DELETE Cascade; + ALTER TABLE PROPERTY_TYPE ADD CONSTRAINT FK_TYPE_PROPERTY_TYPE FOREIGN KEY (TYPE_ID) REFERENCES TYPE (OID); + ALTER TABLE OBJECT ADD CONSTRAINT FK_OBJECT_TYPE FOREIGN KEY (TYPE_ID) REFERENCES TYPE (OID); + ALTER TABLE PROPERTY_TYPE ADD CONSTRAINT FK_PROPERTY_TYPE_TARGET_PROP FOREIGN KEY (TARGET_PROPERTY) REFERENCES PROPERTY_TYPE (OID); + ALTER TABLE OBJECT_PROPERTY ADD CONSTRAINT FK_OBJECT_PROPERTY_PROP_TYPE FOREIGN KEY (PROPERTY_TYPE) REFERENCES PROPERTY_TYPE (OID); + CREATE INDEX OBJECT_TYPE_ID ON OBJECT (TYPE_ID); + CREATE UNIQUE INDEX OBJECT_ID ON OBJECT (ID); + CREATE INDEX OBJECT_PROPERTY_VALUE_UPPER ON OBJECT_PROPERTY (UPPER(VALUE)); + CREATE INDEX OBJECT_PROPERTY_OID ON OBJECT_PROPERTY (OID); + CREATE INDEX OBJECT_PROPERTY_PROP_TYPE ON OBJECT_PROPERTY (PROPERTY_TYPE); + CREATE INDEX OBJECT_PROPERTY_ID ON OBJECT_PROPERTY (ID); + CREATE INDEX OBJECT_PROPERTY_RELATED_OID ON OBJECT_PROPERTY (RELATED_OID); + CREATE INDEX OBJECT_PROPERTY_REL_PROP_TYPE ON OBJECT_PROPERTY (RELATED_PROPERTY_TYPE); + CREATE INDEX OBJECT_PROPERTY_COLINDEX ON OBJECT_PROPERTY (COLINDEX); + CREATE INDEX OBJECT_PROPERTY_VALUE ON OBJECT_PROPERTY (VALUE); + CREATE UNIQUE INDEX TYPE_TYPENAME ON TYPE (TYPENAME); + CREATE INDEX PROPERTY_TYPE_TARGET_PROPERTY ON PROPERTY_TYPE (TARGET_PROPERTY); + CREATE INDEX PROPERTY_TYPE_TYPE_ID ON PROPERTY_TYPE (TYPE_ID); + CREATE INDEX PROPERTY_TYPE_NAME ON PROPERTY_TYPE (NAME); + CREATE INDEX PROPERTY_TYPE_COLLECTION ON PROPERTY_TYPE (COLLECTION); + CREATE UNIQUE INDEX DEFAULT_OBJECT_DEF_KEY ON DEFAULT_OBJECT (DEF_KEY); + CREATE INDEX DEFAULT_OBJECT_ID ON DEFAULT_OBJECT (ID); + + + -- views + -- workspace view + CREATE OR REPLACE VIEW workspace AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT e.value + FROM object_property e, property_type f + WHERE e.property_type = f.oid + AND e.oid = (SELECT g.oid + FROM object_property g, property_type h + WHERE g.property_type = h.oid + AND g.value = (SELECT i.value + FROM object_property i, property_type j + WHERE i.oid = a.oid + AND i.property_type = j.oid + AND j.name = 'name') + AND h.name = 'prefix') + AND f.name = 'URI') uri + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.WorkspaceInfo'; + + -- datastore view + CREATE OR REPLACE VIEW datastore AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'description') description, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'type') type, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.DataStoreInfo'; + + -- feature type view + CREATE OR REPLACE VIEW featuretype AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'nativeName') native_name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'prefixedName') prefixed_name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'abstract') abstract, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'SRS') srs, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'projectionPolicy') projection_policy, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'store.id') store, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'namespace.id') namespace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.FeatureTypeInfo'; + + -- coveragestore view + CREATE OR REPLACE VIEW coveragestore AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'description') description, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'type') type, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.CoverageStoreInfo'; + + -- coverage view + CREATE OR REPLACE VIEW coverage AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'nativeName') native_name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'prefixedName') prefixed_name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'abstract') abstract, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'SRS') srs, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'projectionPolicy') projection_policy, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'store.id') store, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'namespace.id') namespace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.CoverageInfo'; + + -- wmsstore view + CREATE OR REPLACE VIEW wmsstore AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'description') description, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'capabilitiesURL') capabilities_url, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'type') type, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.WMSStoreInfo'; + + -- wms layer view + CREATE OR REPLACE VIEW wmslayer AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'nativeName') native_name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'prefixedName') prefixed_name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'abstract') abstract, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'SRS') srs, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'projectionPolicy') projection_policy, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'store.id') store, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'namespace.id') namespace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.WMSLayerInfo'; + + -- style view + CREATE OR REPLACE VIEW style AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'filename') filename, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.StyleInfo'; + + -- layer view + CREATE OR REPLACE VIEW layer AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'abstract') abstract, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'type') type, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'defaultStyle.id') default_style, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'resource.id') "resource" + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.LayerInfo'; + + -- layergroup styles + CREATE OR REPLACE VIEW layer_style AS + SELECT a.oid, b.related_oid style + FROM object a, object_property b, property_type c, type d + WHERE a.oid = b.oid + AND a.type_id = d.oid + AND b.property_type = c.oid + AND c.name = 'styles.id' + AND d.typename = 'org.geoserver.catalog.LayerInfo'; + + -- layer group view + CREATE OR REPLACE VIEW layergroup AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'abstract') abstract, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'mode') "mode", + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.catalog.LayerGroupInfo'; + + -- layergroup layers + CREATE OR REPLACE VIEW layergroup_layer AS + SELECT a.oid, b.related_oid layer + FROM object a, object_property b, property_type c, type d + WHERE a.oid = b.oid + AND a.type_id = d.oid + AND b.property_type = c.oid + AND c.name = 'layers.id' + AND d.typename = 'org.geoserver.catalog.LayerGroupInfo'; + + -- layergroup styles + CREATE OR REPLACE VIEW layergroup_style AS + SELECT a.oid, b.related_oid style + FROM object a, object_property b, property_type c, type d + WHERE a.oid = b.oid + AND a.type_id = d.oid + AND b.property_type = c.oid + AND c.name = 'styles.id' + AND d.typename = 'org.geoserver.catalog.LayerGroupInfo'; + + -- global view + CREATE OR REPLACE VIEW global AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'featureTypeCacheSize') feature_type_cache_size, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'globalServices') global_services, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'xmlPostRequestLogBufferSize') xml_post_request_log_buf_len, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'updateSequence') update_sequence, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'settings.id') settings + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.config.GeoServerInfo'; + + -- settings view + CREATE OR REPLACE VIEW settings AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'charset') charset, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'verbose') verbose, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'verboseExceptions') verbose_exceptions, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'numDecimals') num_decimals, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'onlineResource') online_resource, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'proxyBaseUrl') proxy_base_url, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'schemaBaseUrl') schema_base_url, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.config.SettingsInfo'; + + -- service view + CREATE OR REPLACE VIEW service AS + SELECT a.oid, + a.id, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'name') name, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'title') title, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'abstract') abstract, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'maintainer') maintainer, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'verbose') verbose, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'citeCompliant') cite_compliant, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'outputStrategy') output_strategy, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'onlineResource') online_resource, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'schemaBaseURL') schema_base_url, + (SELECT c.value + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'enabled') enabled, + (SELECT c.related_oid + FROM object_property c, property_type d + WHERE c.oid = a.oid + AND c.property_type = d.oid + AND d.name = 'workspace.id') workspace + FROM object a, type b + WHERE a.type_id = b.oid + AND b.typename = 'org.geoserver.config.ServiceInfo'; + initdb.postgres.sql: "-- tables\nCREATE TABLE object ( \n oid serial NOT NULL, + \n type_id int4 NOT NULL, \n id text NOT NULL, \n blob text NOT NULL, \n PRIMARY + KEY (oid)\n);\n\nCREATE TABLE object_property (\n oid int4 NOT NULL, \n property_type + int4 NOT NULL, \n id text NOT NULL, \n related_oid int4, \n related_property_type + int4, \n colindex int4 NOT NULL, \n value text, \n PRIMARY KEY (oid, property_type, + colindex)\n);\n\nCREATE TABLE type (\n oid serial NOT NULL,\n typename text + NOT NULL, \n PRIMARY KEY (OID)\n);\n\nCREATE TABLE property_type (\n oid serial + NOT NULL, \n target_property int4, \n type_id int4 NOT NULL, \n name text NOT + NULL, \n collection bool NOT NULL, \n text bool NOT NULL, \n PRIMARY KEY (oid)\n);\n\nCREATE + TABLE default_object (\n def_key text NOT NULL, \n id text NOT NULL\n\n);\n\n-- + foreign keys\nALTER TABLE object_property ADD CONSTRAINT fk_object_property \n + \ FOREIGN KEY (oid) REFERENCES object (oid) ON DELETE CASCADE;\n\nALTER TABLE + property_type ADD CONSTRAINT \n fk_type_property_type FOREIGN KEY (type_id) REFERENCES + type (oid);\n\nALTER TABLE object ADD CONSTRAINT \n fk_object_type FOREIGN KEY + (type_id) REFERENCES type (oid);\n\nALTER TABLE property_type ADD CONSTRAINT \n + \ fk_property_type_target_property FOREIGN KEY (target_property) REFERENCES property_type + (oid);\n\nALTER TABLE object_property ADD CONSTRAINT \n fk_object_property_property_type + FOREIGN KEY (property_type) REFERENCES property_type (oid);\n\n-- indexes\nCREATE + INDEX object_type_id_idx ON object (type_id);\nCREATE UNIQUE INDEX object_id_idx + ON object (id);\n\nCREATE INDEX object_property_value_upper_idx ON object_property + (UPPER(value));\nCREATE INDEX object_property_property_type_idx ON object_property + (property_type);\nCREATE INDEX object_property_id_idx ON object_property (id);\nCREATE + INDEX object_property_related_oid_idx ON object_property (related_oid);\nCREATE + INDEX object_property_related_property_type_idx ON object_property (related_property_type);\nCREATE + INDEX object_property_colindex_idx ON object_property (colindex);\nCREATE INDEX + object_property_value_idx ON object_property (value);\n\nCREATE UNIQUE INDEX type_typename_idx + ON type (typename);\n\nCREATE INDEX property_type_target_property_idx ON property_type + (target_property);\nCREATE INDEX property_type_type_id_idx ON property_type (type_id);\nCREATE + INDEX property_type_name_idx ON property_type (name);\nCREATE INDEX property_type_collection_idx + ON property_type (collection);\n\nCREATE INDEX default_object_def_key_idx ON default_object + (def_key);\nCREATE INDEX default_object_id_idx ON default_object (id);\n\n-- views + - note these views are not used at all in code\n-- workspace view \nCREATE OR + REPLACE VIEW workspace AS\nSELECT a.oid, \n a.id, \n (SELECT c.value + \n FROM object_property c, property_type d \n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'name') as name, + \n (SELECT e.value\n FROM object_property e, property_type f\n + \ WHERE e.property_type = f.oid\n AND e.oid = (SELECT g.oid \n + \ FROM object_property g, property_type h \n WHERE + g.property_type = h.oid\n AND g.value = (SELECT i.value\n + \ FROM object_property i, property_type + j\n WHERE i.oid = a.oid\n AND + i.property_type = j.oid\n AND j.name + = 'name')\n AND h.name = 'prefix')\n AND f.name + = 'URI') as uri\n FROM object a, type b\n WHERE a.type_id = b.oid\n AND b.typename + = 'org.geoserver.catalog.WorkspaceInfo'; \n \n-- datastore view\nCREATE OR + REPLACE VIEW datastore AS\nSELECT a.oid, \n a.id,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'name') as name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'description') as description,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'type') as type,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'workspace.id') workspace\n FROM object a, type b \n WHERE a.type_id = b.oid\n + \ AND b.typename = 'org.geoserver.catalog.DataStoreInfo';\n\n-- feature type + view\nCREATE OR REPLACE VIEW featuretype AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.FeatureTypeInfo';\n\n-- + coveragestore view\nCREATE OR REPLACE VIEW coveragestore AS\nSELECT a.oid, \n + \ a.id,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'name') as name,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'description') as description,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'type') + as type,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.CoverageStoreInfo';\n\n-- + coverage view\nCREATE OR REPLACE VIEW coverage AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.CoverageInfo';\n\n-- + wmsstore view\nCREATE OR REPLACE VIEW wmsstore AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'description') as description,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'capabilitiesURL') as capabilities_url,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'type') as type,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMSStoreInfo';\n\n-- + wms layer view\nCREATE OR REPLACE VIEW wmslayer AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMSLayerInfo';\n\n-- + wmtsstore view\nCREATE OR REPLACE VIEW wmtsstore AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'description') as description,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'capabilitiesURL') as capabilities_url,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'type') as type,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMTSStoreInfo';\n\n-- + wmts layer view\nCREATE OR REPLACE VIEW wmtslayer AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'nativeName') as native_name,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'prefixedName') as prefixed_name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'SRS') as srs,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'projectionPolicy') as projection_policy,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'store.id') store,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'namespace.id') namespace\n FROM object a, type + b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.WMTSLayerInfo';\n\n-- + style view\nCREATE OR REPLACE VIEW style AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'filename') as filename,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') workspace\n FROM + object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.catalog.StyleInfo';\n\n-- + layer view\nCREATE OR REPLACE VIEW layer AS\nSELECT a.oid, \n a.id,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'name') + as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'title') as title,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'type') as type,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'enabled') as enabled,\n (SELECT c.related_oid\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'defaultStyle.id') default_style,\n (SELECT + c.related_oid\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'resource.id') resource\n FROM object a, type b \n WHERE a.type_id = b.oid\n + \ AND b.typename = 'org.geoserver.catalog.LayerInfo';\n\n-- layergroup styles\nCREATE + OR REPLACE VIEW layer_style AS\nSELECT a.oid, b.related_oid as style\n FROM object + a, object_property b, property_type c, type d \n WHERE a.oid = b.oid \n AND + a.type_id = d.oid\n AND b.property_type = c.oid\n AND c.name = 'styles.id'\n + \ AND d.typename = 'org.geoserver.catalog.LayerInfo';\n\n-- layer group view\nCREATE + OR REPLACE VIEW layergroup AS\nSELECT a.oid, \n a.id,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'name') as name,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'mode') as mode,\n + \ (SELECT c.related_oid\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'workspace.id') workspace\n FROM object a, type b \n WHERE a.type_id + = b.oid\n AND b.typename = 'org.geoserver.catalog.LayerGroupInfo';\n\n-- layergroup + layers\nCREATE OR REPLACE VIEW layergroup_layer AS\nSELECT a.oid, b.related_oid + as layer\n FROM object a, object_property b, property_type c, type d \n WHERE + a.oid = b.oid \n AND a.type_id = d.oid\n AND b.property_type = c.oid\n AND + c.name = 'layers.id'\n AND d.typename = 'org.geoserver.catalog.LayerGroupInfo';\n + \ \n-- layergroup styles\nCREATE OR REPLACE VIEW layergroup_style AS\nSELECT a.oid, + b.related_oid as style\n FROM object a, object_property b, property_type c, type + d \n WHERE a.oid = b.oid \n AND a.type_id = d.oid\n AND b.property_type = + c.oid\n AND c.name = 'styles.id'\n AND d.typename = 'org.geoserver.catalog.LayerGroupInfo';\n\n-- + global view\nCREATE OR REPLACE VIEW global AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'featureTypeCacheSize') as feature_type_cache_size,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'globalServices') + as global_services,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'xmlPostRequestLogBufferSize') as xml_post_request_log_buffer_size,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'updateSequence') as update_sequence,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'settings.id') as settings\n + \ FROM object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.config.GeoServerInfo';\n\n-- + settings view\nCREATE OR REPLACE VIEW settings AS\nSELECT a.oid,\n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'title') as title,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'charset') as charset,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'verbose') as + verbose,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'verboseExceptions') as verbose_exceptions,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'numDecimals') + as num_decimals,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'onlineResource') as online_resource,\n (SELECT c.value\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'proxyBaseUrl') as proxy_base_url,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'schemaBaseUrl') as schema_base_url,\n (SELECT c.related_oid\n FROM + object_property c, property_type d\n WHERE c.oid = a.oid\n AND + c.property_type = d.oid\n AND d.name = 'workspace.id') as workspace\n + \ FROM object a, type b \n WHERE a.type_id = b.oid\n AND b.typename = 'org.geoserver.config.SettingsInfo';\n\n-- + service view\nCREATE OR REPLACE VIEW service AS\nSELECT a.oid, \n a.id,\n + \ (SELECT c.value\n FROM object_property c, property_type d\n WHERE + c.oid = a.oid\n AND c.property_type = d.oid\n AND d.name = + 'name') as name,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'title') as title,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'abstract') as abstract,\n (SELECT c.value\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'maintainer') + as maintainer,\n (SELECT c.value\n FROM object_property c, property_type + d\n WHERE c.oid = a.oid\n AND c.property_type = d.oid\n AND + d.name = 'verbose') as verbose,\n (SELECT c.value\n FROM object_property + c, property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'citeCompliant') as cite_compliant,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'outputStrategy') + as output_strategy,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'onlineResource') as online_resource,\n (SELECT + c.value\n FROM object_property c, property_type d\n WHERE c.oid + = a.oid\n AND c.property_type = d.oid\n AND d.name = 'schemaBaseURL') + as schema_base_url,\n (SELECT c.value\n FROM object_property c, + property_type d\n WHERE c.oid = a.oid\n AND c.property_type + = d.oid\n AND d.name = 'enabled') as enabled,\n (SELECT c.related_oid\n + \ FROM object_property c, property_type d\n WHERE c.oid = a.oid\n + \ AND c.property_type = d.oid\n AND d.name = 'workspace.id') + as workspace\n FROM object a, type b \n WHERE a.type_id = b.oid\n AND b.typename + = 'org.geoserver.config.ServiceInfo';\n" +kind: ConfigMap +metadata: + creationTimestamp: null + name: jdbcconfig-scripts diff --git a/geoserver/latest/templates/jdbcconfig/jdbcstore-scripts.yaml b/geoserver/latest/templates/jdbcconfig/jdbcstore-scripts.yaml new file mode 100644 index 0000000..287d69f --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/jdbcstore-scripts.yaml @@ -0,0 +1,54 @@ +apiVersion: v1 +data: + drop.h2.sql: | + DROP TABLE resources CASCADE; + drop.postgres.sql: | + DROP TABLE resources CASCADE; + init.h2.sql: |+ + CREATE TABLE resources + ( + oid integer AUTO_INCREMENT NOT NULL, + name character varying NOT NULL, + parent integer, + last_modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + content binary, + CONSTRAINT resources_pkey PRIMARY KEY (oid), + CONSTRAINT resources_parent_fkey FOREIGN KEY (parent) + REFERENCES resources (oid) + ON UPDATE RESTRICT ON DELETE CASCADE, + CONSTRAINT resources_parent_name_key UNIQUE (parent, name), + CONSTRAINT resources_only_one_root_check CHECK (parent IS NOT NULL OR oid = 0) + ); + + CREATE INDEX resources_parent_name_idx + ON resources (parent NULLS FIRST, name NULLS FIRST); + + INSERT INTO resources (oid, name, parent, content) VALUES (0, '', NULL, NULL); + + ALTER TABLE resources ALTER COLUMN oid RESTART WITH 1; + + init.postgres.sql: |+ + CREATE TABLE resources + ( + oid serial NOT NULL, + name character varying NOT NULL, + parent integer, + last_modified timestamp without time zone NOT NULL DEFAULT timezone('UTC'::text, now()), + content bytea, + CONSTRAINT resources_pkey PRIMARY KEY (oid), + CONSTRAINT resources_parent_fkey FOREIGN KEY (parent) + REFERENCES resources (oid) + ON UPDATE RESTRICT ON DELETE CASCADE, + CONSTRAINT resources_parent_name_key UNIQUE (parent, name), + CONSTRAINT resources_only_one_root_check CHECK (parent IS NOT NULL OR oid = 0) + ); + + CREATE INDEX resources_parent_name_idx + ON resources (parent NULLS FIRST, name NULLS FIRST); + + INSERT INTO resources (oid, name, parent, content) VALUES (0, '', NULL, NULL); + +kind: ConfigMap +metadata: + creationTimestamp: null + name: jdbcstore-scripts diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index 9df2c09..833c1fb 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -195,6 +195,10 @@ spec: resources: {{- toYaml .Values.resources | nindent 12 }} volumeMounts: + - name: jdbcconfig-scripts + mountPath: /var/geoserver/datadir/jdbcconfig/scripts/ + - name: jdbcstore-scripts + mountPath: /var/geoserver/datadir/jdbcstore/scripts/ - name: cluster-properties mountPath: /var/geoserver/datadir/cluster/cluster.properties subPath: cluster.properties @@ -277,6 +281,12 @@ spec: - name: cm-jdbcconfig-enabled configMap: name: cm-jdbcconfig-enabled + - name: jdbcconfig-scripts + configMap: + name: jdbcconfig-scripts + - name: jdbcstore-scripts + configMap: + name: jdbcstore-scripts {{- if .Values.persistence.datadir }} - name: gs-datadir persistentVolumeClaim: From b99b1fa588c0c2846c13254cb63e528be6f40080 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 13:37:44 +0000 Subject: [PATCH 12/18] Refactor jdbc/jdbc store config files Fixed documentation and volume mounts --- geoserver/latest/JDBCConfig_readme.md | 36 ++++++++----------- ...nfig-enabled.yaml => cm-jdbc-enabled.yaml} | 4 +-- ...t-import.yaml => cm-jdbc-init-import.yaml} | 4 +-- .../templates/jdbcconfig/cm-jdbc-initial.yaml | 24 +++++++++++++ geoserver/latest/templates/statefulset.yaml | 17 ++++++--- 5 files changed, 55 insertions(+), 30 deletions(-) rename geoserver/latest/templates/jdbcconfig/{cm-jdbcconfig-enabled.yaml => cm-jdbc-enabled.yaml} (92%) rename geoserver/latest/templates/jdbcconfig/{cm-jdbcconfig-init-import.yaml => cm-jdbc-init-import.yaml} (91%) create mode 100644 geoserver/latest/templates/jdbcconfig/cm-jdbc-initial.yaml diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md index 87f2419..056738d 100644 --- a/geoserver/latest/JDBCConfig_readme.md +++ b/geoserver/latest/JDBCConfig_readme.md @@ -15,39 +15,31 @@ geoserver: helm install geoserver . --values custom_values.yaml ``` -2. Edit the configmap "cm-jdbcconfig-init-import" and ensure correct DB string and credentials: +2. Edit the configmap "cm-jdbc-init-import" and ensure correct DB string and credentials: ```sh -kubectl edit configmap/cm-jdbcconfig-init-import +kubectl edit configmap/cm-jdbc-init-import ``` -3. Also ensure the same credentials are corrected for "cm-jdbcconfig-enabled": +3. Also ensure the same credentials are corrected for "cm-jdbc-enabled": ```sh -kubectl edit configmap/cm-jdbcconfig-enabled +kubectl edit configmap/cm-jdbc-enabled ``` -4. Patch the geoserver statefulset to mount the "cm-jdbcconfig-init-import" configmap and replicaCount is set to 1: +4. Patch the geoserver statefulset to mount the "cm-jdbc-init-import" configmap and replicaCount is set to 1: ```sh kubectl patch statefulset geoserver --type='json' -p='[ { - "op": "add", - "path": "/spec/template/spec/containers/0/volumeMounts/0", - "value": { - "name": "cm-jdbcconfig-init-import", - "mountPath": "/var/geoserver/datadir/jdbcconfig/jdbcconfig.properties", - "subPath": "jdbccfg.properties" - } + "op": "replace", + "path": "/spec/template/spec/containers/0/volumeMounts/0/name", + "value": "cm-jdbc-init-import" }, { - "op": "add", - "path": "/spec/template/spec/containers/0/volumeMounts/1", - "value": { - "name": "cm-jdbcconfig-init-import", - "mountPath": "/var/geoserver/datadir/jdbcstore/jdbcstore.properties", - "subPath": "jdbccfg.properties" - } + "op": "replace", + "path": "/spec/template/spec/containers/0/volumeMounts/1/name", + "value": "cm-jdbc-init-import" }, { "op": "replace", @@ -63,19 +55,19 @@ kubectl patch statefulset geoserver --type='json' -p='[ kubectl logs -f statefulsets/geoserver ``` -6. Patch the geoserver statefulset to use the "cm-jdbcconfig-enabled" configmap now: +6. Patch the geoserver statefulset to use the "cm-jdbc-enabled" configmap now: ```sh kubectl patch statefulset geoserver --type='json' -p='[ { "op": "replace", "path": "/spec/template/spec/containers/0/volumeMounts/0/name", - "value": "cm-jdbcconfig-enabled" + "value": "cm-jdbc-enabled" }, { "op": "replace", "path": "/spec/template/spec/containers/0/volumeMounts/1/name", - "value": "cm-jdbcconfig-enabled" + "value": "cm-jdbc-enabled" } ]' ``` diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbc-enabled.yaml similarity index 92% rename from geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml rename to geoserver/latest/templates/jdbcconfig/cm-jdbc-enabled.yaml index f730011..09bc56e 100644 --- a/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-enabled.yaml +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbc-enabled.yaml @@ -1,9 +1,9 @@ apiVersion: v1 kind: ConfigMap metadata: - name: cm-jdbcconfig-enabled + name: cm-jdbc-enabled data: - jdbccfg.properties: | + jdbc.properties: | initdb=false import=false enabled=true diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbc-init-import.yaml similarity index 91% rename from geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml rename to geoserver/latest/templates/jdbcconfig/cm-jdbc-init-import.yaml index 9da99e3..ca418f8 100644 --- a/geoserver/latest/templates/jdbcconfig/cm-jdbcconfig-init-import.yaml +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbc-init-import.yaml @@ -1,9 +1,9 @@ apiVersion: v1 kind: ConfigMap metadata: - name: cm-jdbcconfig-init-import + name: cm-jdbc-init-import data: - jdbccfg.properties: | + jdbc.properties: | initdb=true import=true enabled=true diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbc-initial.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbc-initial.yaml new file mode 100644 index 0000000..f006135 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbc-initial.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm-jdbc-initial +data: + jdbc.properties: | + initdb=true + import=true + enabled=false + username=docker + password=docker + jdbcUrl=jdbc\:postgresql\://postgis.db.svc.cluster.local\:5432/gis1 + pool.poolPreparedStatements=false + pool.testWhileIdle=false + pool.validationQuery=SELECT now() + pool.timeBetweenEvictionRunsMillis=-1L + pool.minIdle=4 + ignoreDirs=.git,data,jdbcstore,jdbcconfig,temp,tmp,logs,wps_data,cluster,gwc-layers + pool.maxOpenPreparedStatements=50 + driverClassName=org.postgresql.Driver + pool.maxActive=10 + initScript=jdbcconfig/scripts/initdb.postgres.sql + debugMode=true + pool.testOnBorrow=true \ No newline at end of file diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index 833c1fb..fa130cd 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -195,6 +195,12 @@ spec: resources: {{- toYaml .Values.resources | nindent 12 }} volumeMounts: + - name: cm-jdbc-initial + mountPath: /var/geoserver/datadir/jdbcconfig/jdbcconfig.properties + subPath: jdbc.properties + - name: cm-jdbc-initial + mountPath: /var/geoserver/datadir/jdbcstore/jdbcstore.properties + subPath: jdbc.properties - name: jdbcconfig-scripts mountPath: /var/geoserver/datadir/jdbcconfig/scripts/ - name: jdbcstore-scripts @@ -275,12 +281,15 @@ spec: - name: hazelcast-xml configMap: name: hazelcast-xml - - name: cm-jdbcconfig-init-import + - name: cm-jdbc-initial configMap: - name: cm-jdbcconfig-init-import - - name: cm-jdbcconfig-enabled + name: cm-jdbc-initial + - name: cm-jdbc-init-import configMap: - name: cm-jdbcconfig-enabled + name: cm-jdbc-init-import + - name: cm-jdbc-enabled + configMap: + name: cm-jdbc-enabled - name: jdbcconfig-scripts configMap: name: jdbcconfig-scripts From aa9f8d752813e521335caa1d626124e4b94252af Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 13:45:36 +0000 Subject: [PATCH 13/18] Update jdbcconfig readme --- geoserver/latest/JDBCConfig_readme.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md index 056738d..3a2f61d 100644 --- a/geoserver/latest/JDBCConfig_readme.md +++ b/geoserver/latest/JDBCConfig_readme.md @@ -41,7 +41,7 @@ kubectl patch statefulset geoserver --type='json' -p='[ "path": "/spec/template/spec/containers/0/volumeMounts/1/name", "value": "cm-jdbc-init-import" }, - { + { "op": "replace", "path": "/spec/replicas", "value": 1 @@ -49,13 +49,13 @@ kubectl patch statefulset geoserver --type='json' -p='[ ]' ``` -5. Let this GeoServer run, monitor the logs and wait for import to complete. +5. Wait for pods to recreate, reinitialise, let this GeoServer run, monitor the logs and wait for import to complete. ```sh kubectl logs -f statefulsets/geoserver ``` -6. Patch the geoserver statefulset to use the "cm-jdbc-enabled" configmap now: +6. Patch the geoserver statefulset to use the "cm-jdbc-enabled" configmap and to your desired replica count: ```sh kubectl patch statefulset geoserver --type='json' -p='[ @@ -68,6 +68,11 @@ kubectl patch statefulset geoserver --type='json' -p='[ "op": "replace", "path": "/spec/template/spec/containers/0/volumeMounts/1/name", "value": "cm-jdbc-enabled" + }, + { + "op": "replace", + "path": "/spec/replicas", + "value": 2 } ]' ``` From bf389a32ab540b7f81dcdde43e552821f2b68016 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 14:13:57 +0000 Subject: [PATCH 14/18] Seperate the jdbcstore config files because the initScript path has to be different for both --- geoserver/latest/JDBCConfig_readme.md | 21 +++++++--------- .../jdbcconfig/cm-jdbcstore-enabled.yaml | 24 +++++++++++++++++++ .../jdbcconfig/cm-jdbcstore-init-import.yaml | 24 +++++++++++++++++++ .../jdbcconfig/cm-jdbcstore-initial.yaml | 24 +++++++++++++++++++ geoserver/latest/templates/statefulset.yaml | 11 ++++++++- 5 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 geoserver/latest/templates/jdbcconfig/cm-jdbcstore-enabled.yaml create mode 100644 geoserver/latest/templates/jdbcconfig/cm-jdbcstore-init-import.yaml create mode 100644 geoserver/latest/templates/jdbcconfig/cm-jdbcstore-initial.yaml diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md index 3a2f61d..bf4e4bd 100644 --- a/geoserver/latest/JDBCConfig_readme.md +++ b/geoserver/latest/JDBCConfig_readme.md @@ -15,19 +15,16 @@ geoserver: helm install geoserver . --values custom_values.yaml ``` -2. Edit the configmap "cm-jdbc-init-import" and ensure correct DB string and credentials: +2. Edit the following configmaps and ensure correct DB string and credentials in all of them: ```sh kubectl edit configmap/cm-jdbc-init-import -``` - -3. Also ensure the same credentials are corrected for "cm-jdbc-enabled": - -```sh kubectl edit configmap/cm-jdbc-enabled +kubectl edit configmap/cm-jdbcstore-init-import +kubectl edit configmap/cm-jdbcstore-enabled ``` -4. Patch the geoserver statefulset to mount the "cm-jdbc-init-import" configmap and replicaCount is set to 1: +3. Patch the geoserver statefulset to mount the "cm-jdbc-init-import" and "cm-jdbcstore-init-import" configmap and replicaCount is set to 1: ```sh kubectl patch statefulset geoserver --type='json' -p='[ @@ -39,7 +36,7 @@ kubectl patch statefulset geoserver --type='json' -p='[ { "op": "replace", "path": "/spec/template/spec/containers/0/volumeMounts/1/name", - "value": "cm-jdbc-init-import" + "value": "cm-jdbcstore-init-import" }, { "op": "replace", @@ -49,13 +46,13 @@ kubectl patch statefulset geoserver --type='json' -p='[ ]' ``` -5. Wait for pods to recreate, reinitialise, let this GeoServer run, monitor the logs and wait for import to complete. +4. Wait for pods to recreate, reinitialise, let this GeoServer run, monitor the logs and wait for import to complete. ```sh kubectl logs -f statefulsets/geoserver ``` -6. Patch the geoserver statefulset to use the "cm-jdbc-enabled" configmap and to your desired replica count: +5. Patch the geoserver statefulset to use the "cm-jdbc-enabled" and "cm-jdbcstore-enabled" configmap and to your desired replica count: ```sh kubectl patch statefulset geoserver --type='json' -p='[ @@ -67,7 +64,7 @@ kubectl patch statefulset geoserver --type='json' -p='[ { "op": "replace", "path": "/spec/template/spec/containers/0/volumeMounts/1/name", - "value": "cm-jdbc-enabled" + "value": "cm-jdbcstore-enabled" }, { "op": "replace", @@ -77,4 +74,4 @@ kubectl patch statefulset geoserver --type='json' -p='[ ]' ``` -7. Ensure geoserver is restarted \ No newline at end of file +6. Ensure geoserver is restarted \ No newline at end of file diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-enabled.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-enabled.yaml new file mode 100644 index 0000000..36cc094 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-enabled.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm-jdbcstore-enabled +data: + jdbc.properties: | + initdb=false + import=false + enabled=true + username=docker + password=docker + jdbcUrl=jdbc\:postgresql\://postgis.db.svc.cluster.local\:5432/gis1 + pool.poolPreparedStatements=false + pool.testWhileIdle=false + pool.timeBetweenEvictionRunsMillis=-1L + pool.validationQuery=SELECT now() + pool.minIdle=4 + ignoreDirs=.git,data,jdbcstore,jdbcconfig,temp,tmp,logs,wps_data,cluster,gwc-layers + pool.maxOpenPreparedStatements=50 + driverClassName=org.postgresql.Driver + pool.maxActive=10 + initScript=jdbcstore/scripts/init.postgres.sql + debugMode=false + pool.testOnBorrow=true \ No newline at end of file diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-init-import.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-init-import.yaml new file mode 100644 index 0000000..a39b207 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-init-import.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm-jdbcstore-init-import +data: + jdbc.properties: | + initdb=true + import=true + enabled=true + username=docker + password=docker + jdbcUrl=jdbc\:postgresql\://postgis.db.svc.cluster.local\:5432/gis1 + pool.poolPreparedStatements=false + pool.testWhileIdle=false + pool.validationQuery=SELECT now() + pool.timeBetweenEvictionRunsMillis=-1L + pool.minIdle=4 + ignoreDirs=.git,data,jdbcstore,jdbcconfig,temp,tmp,logs,wps_data,cluster,gwc-layers + pool.maxOpenPreparedStatements=50 + driverClassName=org.postgresql.Driver + pool.maxActive=10 + initScript=jdbcstore/scripts/init.postgres.sql + debugMode=true + pool.testOnBorrow=true \ No newline at end of file diff --git a/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-initial.yaml b/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-initial.yaml new file mode 100644 index 0000000..4c23463 --- /dev/null +++ b/geoserver/latest/templates/jdbcconfig/cm-jdbcstore-initial.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm-jdbcstore-initial +data: + jdbc.properties: | + initdb=true + import=true + enabled=false + username=docker + password=docker + jdbcUrl=jdbc\:postgresql\://postgis.db.svc.cluster.local\:5432/gis1 + pool.poolPreparedStatements=false + pool.testWhileIdle=false + pool.validationQuery=SELECT now() + pool.timeBetweenEvictionRunsMillis=-1L + pool.minIdle=4 + ignoreDirs=.git,data,jdbcstore,jdbcconfig,temp,tmp,logs,wps_data,cluster,gwc-layers + pool.maxOpenPreparedStatements=50 + driverClassName=org.postgresql.Driver + pool.maxActive=10 + initScript=jdbcstore/scripts/init.postgres.sql + debugMode=true + pool.testOnBorrow=true \ No newline at end of file diff --git a/geoserver/latest/templates/statefulset.yaml b/geoserver/latest/templates/statefulset.yaml index fa130cd..370651c 100644 --- a/geoserver/latest/templates/statefulset.yaml +++ b/geoserver/latest/templates/statefulset.yaml @@ -198,7 +198,7 @@ spec: - name: cm-jdbc-initial mountPath: /var/geoserver/datadir/jdbcconfig/jdbcconfig.properties subPath: jdbc.properties - - name: cm-jdbc-initial + - name: cm-jdbcstore-initial mountPath: /var/geoserver/datadir/jdbcstore/jdbcstore.properties subPath: jdbc.properties - name: jdbcconfig-scripts @@ -290,6 +290,15 @@ spec: - name: cm-jdbc-enabled configMap: name: cm-jdbc-enabled + - name: cm-jdbcstore-initial + configMap: + name: cm-jdbcstore-initial + - name: cm-jdbcstore-init-import + configMap: + name: cm-jdbcstore-init-import + - name: cm-jdbcstore-enabled + configMap: + name: cm-jdbcstore-enabled - name: jdbcconfig-scripts configMap: name: jdbcconfig-scripts From a81c575142a02b58f1308b29e13366ca96dd8054 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 14:39:49 +0000 Subject: [PATCH 15/18] Fix HZ svc selectors --- geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml b/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml index 645e6ee..9af5510 100644 --- a/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml +++ b/geoserver/latest/templates/jdbcconfig/svc-standalone-hz.yaml @@ -2,11 +2,9 @@ apiVersion: v1 kind: Service metadata: name: standalone-hz - labels: - {{- include "geoserver.labels" . | nindent 4 }} spec: selector: - {{- include "geoserver.labels" . | nindent 4 }} + {{- include "geoserver.selectorLabels" . | nindent 4 }} ports: - protocol: TCP port: 5702 From a98733ee8cff8c81c53093ee33574806b8abf00f Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 6 Dec 2024 14:40:39 +0000 Subject: [PATCH 16/18] Include a note about which steps to repeat if helm chart is upgraded --- geoserver/latest/JDBCConfig_readme.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md index bf4e4bd..f2c98ff 100644 --- a/geoserver/latest/JDBCConfig_readme.md +++ b/geoserver/latest/JDBCConfig_readme.md @@ -74,4 +74,8 @@ kubectl patch statefulset geoserver --type='json' -p='[ ]' ``` -6. Ensure geoserver is restarted \ No newline at end of file +6. Ensure geoserver is restarted + +--- + +NB: Repeat step 2 and 5 if helm chart is upgraded. \ No newline at end of file From 9777cde5490258da074d43837960c8d2c51d0b44 Mon Sep 17 00:00:00 2001 From: Irfan Date: Wed, 11 Dec 2024 11:51:34 +0000 Subject: [PATCH 17/18] Update jdbcconfig readme - Namespaced chart installation requires editing hazelcast.xml to use the right svc FQDN - Added more detail about verifying import etc --- geoserver/latest/JDBCConfig_readme.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/geoserver/latest/JDBCConfig_readme.md b/geoserver/latest/JDBCConfig_readme.md index f2c98ff..8a5b2cf 100644 --- a/geoserver/latest/JDBCConfig_readme.md +++ b/geoserver/latest/JDBCConfig_readme.md @@ -4,7 +4,7 @@ Instructions to install GS with the JDBCConfig family of plugins: 1. Install GS with plugins using our helm chart with following custom_values.yaml: -Adjust the version in URL to match the GS version image that you use: +(Adjust the version in URLs to match the GS version image that you use) ```yaml geoserver: @@ -24,6 +24,8 @@ kubectl edit configmap/cm-jdbcstore-init-import kubectl edit configmap/cm-jdbcstore-enabled ``` +Also edit `kubectl edit configmap/hazelcast-xml` and adjust the namespace of the FQDN string `standalone-hz.default.svc.cluster.local` as necessary. (For example, If you installed this helm chart in a different namespace) + 3. Patch the geoserver statefulset to mount the "cm-jdbc-init-import" and "cm-jdbcstore-init-import" configmap and replicaCount is set to 1: ```sh @@ -46,7 +48,7 @@ kubectl patch statefulset geoserver --type='json' -p='[ ]' ``` -4. Wait for pods to recreate, reinitialise, let this GeoServer run, monitor the logs and wait for import to complete. +4. At this point, geoserver pod will restart and the jdbcstore import to the DB will take place. Monitor the logs and wait for the process to complete. You can check the DB and see if "objects" and "resources" relations are created in the public namespace. ```sh kubectl logs -f statefulsets/geoserver From 07ff7787e101726b397898d86f28b1751b6324b6 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 21 Feb 2025 15:53:09 +0000 Subject: [PATCH 18/18] Implement an option to enable sticky sessions for web UI This is needed to fix the login issue in HA scenarios. - A separate ingress is created just for handling the login problem in the webui. - This ingress is annotated with the sticky session cookie. - These cookies will only be valid for /geoserver/web and /geoserver/j_spring_security_check which are relevant to the login form. Fixes geosolutions-it/DevOps#1605 --- geoserver/latest/templates/ingress-webui.yaml | 61 +++++++++++++++++++ geoserver/latest/values.yaml | 24 ++++++++ 2 files changed, 85 insertions(+) create mode 100644 geoserver/latest/templates/ingress-webui.yaml diff --git a/geoserver/latest/templates/ingress-webui.yaml b/geoserver/latest/templates/ingress-webui.yaml new file mode 100644 index 0000000..12b6c32 --- /dev/null +++ b/geoserver/latest/templates/ingress-webui.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress_webui.enabled -}} +{{- $fullName := include "geoserver.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress_webui.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress_webui.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress_webui.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }}-webui + labels: + {{- include "geoserver.labels" . | nindent 4 }} + {{- with .Values.ingress_webui.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress_webui.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress_webui.className }} + {{- end }} + {{- if .Values.ingress_webui.tls }} + tls: + {{- range .Values.ingress_webui.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress_webui.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/geoserver/latest/values.yaml b/geoserver/latest/values.yaml index 6baec12..b6f24de 100644 --- a/geoserver/latest/values.yaml +++ b/geoserver/latest/values.yaml @@ -59,6 +59,30 @@ ingress: # hosts: # - chart-example.local +# The below is needed to fix login when replicas >2 (HA) +ingress_webui: + enabled: false # Flip this to "true" when replica >2 + className: "" + annotations: + nginx.ingress.kubernetes.io/affinity: 'cookie' + # cookie path has to be /geoserver so it can match BOTH /geoserver/j_spring_security_check AND /geoserver/web + nginx.ingress.kubernetes.io/session-cookie-path: '/geoserver' + hosts: + - host: geoserver.local + paths: + - path: /geoserver/web + pathType: ImplementationSpecific + backend: + serviceName: geoserver + servicePort: 8080 + - host: geoserver.local + paths: + - path: /geoserver/j_spring_security_check + pathType: ImplementationSpecific + backend: + serviceName: geoserver + servicePort: 8080 + resources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little