Skip to content

Commit c2a0515

Browse files
authored
CLD-703: Support additional volumeClaimTemplates (#99)
* CLD-703: Support additional volumeClaimTemplates * change extraVolume and extraVolumeMount to additionalVolume and additionalVolumeMount * update parameters section in README for additionalVolumes and additionalVolumeMounts * provide example for additional Volumes * remove duplicated service.annotations * remove persistence.mountPath
1 parent e54559e commit c2a0515

File tree

4 files changed

+77
-17
lines changed

4 files changed

+77
-17
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
- [Service](#service)
3030
- [Get the ClusterIP Service Name](#get-the-clusterip-service-name)
3131
- [Using the Service DNS Record to Access MarkLogic](#using-the-service-dns-record-to-access-marklogic)
32+
- [Additional Ports](#additional-ports)
3233
- [Port Forward](#port-forward)
3334
- [Forward to Pod](#forward-to-pod)
3435
- [Forward to Service](#forward-to-service)
@@ -497,9 +498,9 @@ This table describes the list of available parameters for Helm Chart.
497498
| `persistence.size` | Size of storage request for MarkLogic data volume | `10Gi` |
498499
| `persistence.annotations` | Annotations for Persistence Volume Claim (PVC) | `{}` |
499500
| `persistence.accessModes` | Access mode for persistence volume | `["ReadWriteOnce"]` |
500-
| `extraVolumes` | Extra list of additional volumes for MarkLogic statefulset | `[]` |
501-
| `extraVolumeMounts` | Extra list of additional volumeMounts for MarkLogic container | `[]` |
502501
| `additionalContainerPorts` | List of ports in addition to the defaults exposed at the container level (Note: This does not typically need to be updated. Use `service.additionalPorts` to expose app server ports.) | `[]` |
502+
| `additionalVolumes` | List of additional volumes to add to the MarkLogic containers | `[]` |
503+
| `additionalVolumeMounts` | List of mount points for the additional volumes to add to the MarkLogic containers | `[]` |
503504
| `service.type` | type of the default service | `ClusterIP` |
504505
| `service.additionalPorts` | List of ports in addition to the defaults exposed at the service level. | `[]` |
505506
| `serviceAccount.create` | Enable this parameter to create a service account for a MarkLogic Pod | `true` |

charts/templates/statefulset.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,11 +316,11 @@ spec:
316316
- name: datadir
317317
emptyDir: {}
318318
{{- end }}
319-
{{- if .Values.extraVolumes }}
320-
{{- toYaml .Values.extraVolumes | nindent 8 }}
319+
{{- if .Values.additionalVolumes }}
320+
{{- toYaml .Values.additionalVolumes | nindent 8 }}
321321
{{- end }}
322322
{{- end }}
323-
{{- if .Values.persistence.enabled }}
323+
{{- if or .Values.persistence.enabled .Values.additionalVolumeClaimTemplates }}
324324
volumeClaimTemplates:
325325
- metadata:
326326
name: datadir
@@ -341,4 +341,7 @@ spec:
341341
resources:
342342
requests:
343343
storage: {{ .Values.persistence.size }}
344+
{{- if .Values.additionalVolumeClaimTemplates }}
345+
{{- toYaml .Values.additionalVolumeClaimTemplates | nindent 4 }}
346+
{{- end }}
344347
{{- end }}

charts/values.yaml

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,26 @@ persistence:
9292
accessModes:
9393
- ReadWriteOnce
9494

95-
# specify extra list of volumes
96-
extraVolumes: []
97-
# specify extra list of volumeMounts
98-
extraVolumeMounts: []
95+
## Specify additional list of persistent volume claims
96+
additionalVolumeClaimTemplates: []
97+
# - metadata:
98+
# name: "logsdir"
99+
# spec:
100+
# accessModes:
101+
# - ReadWriteOnce
102+
# resources:
103+
# requests:
104+
# storage: 10Gi
105+
106+
## specify additional list of volumes
107+
additionalVolumes: []
108+
# - name: additional-vol
109+
# emptyDir: {}
110+
111+
## specify additional list of volumeMounts
112+
additionalVolumeMounts: []
113+
# - name: "logsdir"
114+
# mountPath: "/var/opt/MarkLogic/Logs"
99115

100116
## Container listener port configuration
101117
## ref: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/
@@ -142,8 +158,6 @@ service:
142158
## targetPort: 8010
143159
## protocol: TCP
144160
additionalPorts: []
145-
# Annotations to add to the service
146-
annotations: {}
147161

148162
serviceAccount:
149163
# Specifies whether a service account should be created

test/template/template_test.go

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@ func TestChartTemplateNoLogCollection(t *testing.T) {
4040
// render the tempate
4141
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/statefulset.yaml"})
4242

43-
var statefulset appsv1.Deployment
43+
var statefulset appsv1.StatefulSet
4444
helm.UnmarshalK8SYaml(t, output, &statefulset)
45-
// t.Log(statefulset)
4645

4746
// Verify the name and namespace matches
4847
require.Equal(t, namespaceName, statefulset.Namespace)
@@ -65,14 +64,13 @@ func TestChartTemplateLogCollection(t *testing.T) {
6564

6665
// Set up the namespace; confirm that the template renders the expected value for the namespace.
6766
namespaceName := "marklogic-" + strings.ToLower(random.UniqueId())
68-
t.Logf("Namespace: %s\n", namespaceName)
6967

7068
// Setup the args for helm install
7169
options := &helm.Options{
7270
SetValues: map[string]string{
7371
"image.repository": "marklogicdb/marklogic-db",
7472
"image.tag": "latest",
75-
"persistence.enabled": "false",
73+
"persistence.enabled": "true",
7674
"logCollection.enabled": "true",
7775
},
7876
KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
@@ -81,9 +79,8 @@ func TestChartTemplateLogCollection(t *testing.T) {
8179
// render the tempate
8280
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/statefulset.yaml"})
8381

84-
var statefulset appsv1.Deployment
82+
var statefulset appsv1.StatefulSet
8583
helm.UnmarshalK8SYaml(t, output, &statefulset)
86-
// t.Log(statefulset)
8784

8885
// Verify the name and namespace matches
8986
require.Equal(t, namespaceName, statefulset.Namespace)
@@ -97,3 +94,48 @@ func TestChartTemplateLogCollection(t *testing.T) {
9794
require.Equal(t, statefulSetContainers[0].Image, expectedImage1)
9895
require.Equal(t, statefulSetContainers[1].Image, expectedImage2)
9996
}
97+
98+
func TestTemplatePersistence(t *testing.T) {
99+
t.Parallel()
100+
101+
// Path to the helm chart we will test
102+
helmChartPath, err := filepath.Abs("../../charts")
103+
releaseName := "marklogic-test"
104+
require.NoError(t, err)
105+
106+
// Set up the namespace; confirm that the template renders the expected value for the namespace.
107+
namespaceName := "marklogic-" + strings.ToLower(random.UniqueId())
108+
109+
additionalVolumeClaimTemplatesName := "log-volume"
110+
additionalVolumeClaimTemplatesAccessModes := "ReadWriteOnce"
111+
additionalVolumeClaimTemplatesResourcesRequestsStorage := "20Gi"
112+
113+
// Setup the args for helm install
114+
options := &helm.Options{
115+
SetValues: map[string]string{
116+
"image.repository": "marklogicdb/marklogic-db",
117+
"image.tag": "latest",
118+
"additionalVolumeClaimTemplates[0].metadata.name": additionalVolumeClaimTemplatesName,
119+
"additionalVolumeClaimTemplates[0].spec.accessModes[0]": additionalVolumeClaimTemplatesAccessModes,
120+
"additionalVolumeClaimTemplates[0].spec.resources.requests.storage": additionalVolumeClaimTemplatesResourcesRequestsStorage,
121+
},
122+
KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
123+
}
124+
125+
// render the tempate
126+
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/statefulset.yaml"})
127+
128+
var statefulset appsv1.StatefulSet
129+
helm.UnmarshalK8SYaml(t, output, &statefulset)
130+
131+
// Verify default persistent volume claim
132+
require.Equal(t, len(statefulset.Spec.VolumeClaimTemplates), 2)
133+
require.Equal(t, string(statefulset.Spec.VolumeClaimTemplates[0].Name), "datadir")
134+
require.Equal(t, string(statefulset.Spec.VolumeClaimTemplates[0].Spec.AccessModes[0]), "ReadWriteOnce")
135+
require.Equal(t, statefulset.Spec.VolumeClaimTemplates[0].Spec.Resources.Requests.Storage().String(), "10Gi")
136+
137+
// Verify the additional volume claim
138+
require.Equal(t, string(statefulset.Spec.VolumeClaimTemplates[1].Name), additionalVolumeClaimTemplatesName)
139+
require.Equal(t, string(statefulset.Spec.VolumeClaimTemplates[1].Spec.AccessModes[0]), additionalVolumeClaimTemplatesAccessModes)
140+
require.Equal(t, statefulset.Spec.VolumeClaimTemplates[1].Spec.Resources.Requests.Storage().String(), additionalVolumeClaimTemplatesResourcesRequestsStorage)
141+
}

0 commit comments

Comments
 (0)