diff --git a/charts/arcadedb/templates/statefulset.yaml b/charts/arcadedb/templates/statefulset.yaml index ae90826..5bf9fac 100644 --- a/charts/arcadedb/templates/statefulset.yaml +++ b/charts/arcadedb/templates/statefulset.yaml @@ -84,6 +84,10 @@ spec: - name: arcadedb-data mountPath: {{ .Values.arcadedb.databaseDirectory }} {{- end }} + {{- if .Values.persistence.config.enabled }} + - name: arcadedb-config + mountPath: {{ .Values.arcadedb.configDirectory }} + {{- end }} {{- with .Values.volumeMounts }} {{- toYaml . | nindent 12 }} {{- end }} @@ -142,6 +146,19 @@ spec: requests: storage: {{ .Values.persistence.size }} {{- end }} + {{- if .Values.persistence.config.enabled }} + - metadata: + name: arcadedb-config + spec: + accessModes: + - {{ .Values.persistence.config.accessMode }} + {{- if .Values.persistence.config.storageClass }} + storageClassName: {{ .Values.persistence.config.storageClass }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.config.size }} + {{- end }} {{- with .Values.volumeClaimTemplates }} {{- toYaml . | nindent 4 }} {{- end }} diff --git a/charts/arcadedb/tests/statefulset_test.yaml b/charts/arcadedb/tests/statefulset_test.yaml index b756231..3a22aa5 100644 --- a/charts/arcadedb/tests/statefulset_test.yaml +++ b/charts/arcadedb/tests/statefulset_test.yaml @@ -460,3 +460,105 @@ tests: - contains: path: spec.template.spec.containers[0].command content: "-Darcadedb.server.defaultDatabases=Universe[admin:pwd]" + + # ── config persistence ────────────────────────────────────────────────────── + + - it: config persistence disabled by default — no config volumeMount or VCT + asserts: + - notContains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: arcadedb-config + mountPath: /home/arcadedb/config + - notExists: + path: spec.volumeClaimTemplates[1] + + - it: config persistence enabled renders volumeMount at configDirectory + set: + persistence.config.enabled: true + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: arcadedb-config + mountPath: /home/arcadedb/config + + - it: config persistence enabled renders VolumeClaimTemplate for arcadedb-config + set: + persistence.config.enabled: true + asserts: + - contains: + path: spec.volumeClaimTemplates + content: + metadata: + name: arcadedb-config + spec: + accessModes: [ReadWriteOnce] + resources: + requests: + storage: 1Gi + + - it: config persistence size override flows through + set: + persistence.config.enabled: true + persistence.config.size: 5Gi + asserts: + - equal: + path: spec.volumeClaimTemplates[1].spec.resources.requests.storage + value: 5Gi + + - it: config persistence storageClass override flows through + set: + persistence.config.enabled: true + persistence.config.storageClass: fast-ssd + asserts: + - equal: + path: spec.volumeClaimTemplates[1].spec.storageClassName + value: fast-ssd + + - it: config persistence accessMode override flows through + set: + persistence.config.enabled: true + persistence.config.accessMode: ReadWriteMany + asserts: + - equal: + path: spec.volumeClaimTemplates[1].spec.accessModes[0] + value: ReadWriteMany + + - it: arcadedb.configDirectory override flows through to config volumeMount mountPath + set: + persistence.config.enabled: true + arcadedb.configDirectory: /custom/config + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: arcadedb-config + mountPath: /custom/config + + - it: config VCT is second entry after data VCT when both persistence flags enabled + set: + persistence.config.enabled: true + asserts: + - equal: + path: spec.volumeClaimTemplates[0].metadata.name + value: arcadedb-data + - equal: + path: spec.volumeClaimTemplates[1].metadata.name + value: arcadedb-config + + - it: config persistence enabled with data persistence disabled still renders config VCT + set: + persistence.enabled: false + persistence.config.enabled: true + asserts: + - contains: + path: spec.volumeClaimTemplates + content: + metadata: + name: arcadedb-config + spec: + accessModes: [ReadWriteOnce] + resources: + requests: + storage: 1Gi diff --git a/charts/arcadedb/values.yaml b/charts/arcadedb/values.yaml index 53a27c5..a7853c0 100644 --- a/charts/arcadedb/values.yaml +++ b/charts/arcadedb/values.yaml @@ -5,6 +5,8 @@ replicaCount: 1 arcadedb: ## @param arcadedb.databaseDirectory Database storage directory inside the container databaseDirectory: "/home/arcadedb/databases" + ## @param arcadedb.configDirectory Config storage directory inside the container (users, tokens, server settings) + configDirectory: "/home/arcadedb/config" ## @param arcadedb.defaultDatabases Databases to create at startup. Empty = none. ## Example: "Universe[admin:password]" defaultDatabases: "" @@ -182,6 +184,19 @@ persistence: ## @param persistence.storageClass StorageClass name. Empty = cluster default. storageClass: "" + ## @section persistence.config + ## Persist the config directory (users, tokens, server settings). + ## Without this, configured users and tokens are lost on pod restart. + config: + ## @param persistence.config.enabled Persist the config directory with a separate PVC. + enabled: false + ## @param persistence.config.size PVC size for the config directory + size: 1Gi + ## @param persistence.config.accessMode PVC access mode for config + accessMode: ReadWriteOnce + ## @param persistence.config.storageClass StorageClass name for config PVC. Empty = cluster default. + storageClass: "" + ## @param volumes Additional pod volumes volumes: [] # - name: arcadedb-config