This is an automated email from the ASF dual-hosted git repository.
houston pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-operator.git
The following commit(s) were added to refs/heads/main by this push:
new 04aefa9 Fix volume mounts for PVCs with custom names (#439)
04aefa9 is described below
commit 04aefa97963991e76b8d1bc3ca378314c9dc53c2
Author: Houston Putman <[email protected]>
AuthorDate: Mon May 9 12:40:49 2022 -0400
Fix volume mounts for PVCs with custom names (#439)
---
controllers/solrcloud_controller_storage_test.go | 24 +++++++++++++++++++-----
controllers/util/solr_util.go | 12 ++++++++----
helm/solr-operator/Chart.yaml | 7 +++++++
3 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/controllers/solrcloud_controller_storage_test.go
b/controllers/solrcloud_controller_storage_test.go
index 86f28cb..fbdf54d 100644
--- a/controllers/solrcloud_controller_storage_test.go
+++ b/controllers/solrcloud_controller_storage_test.go
@@ -107,6 +107,8 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(found.Spec.VolumeClaimTemplates[0].Labels[util.SolrPVCStorageLabel]).To(Equal("data"),
"PVC Storage label doesn't match")
g.Expect(found.Spec.VolumeClaimTemplates[0].Labels[util.SolrPVCInstanceLabel]).To(Equal(solrCloud.Name),
"PVC Instance label doesn't match")
g.Expect(found.Spec.VolumeClaimTemplates[0].Labels["base"]).To(Equal("here"),
"Additional PVC label doesn't match")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(found.Spec.VolumeClaimTemplates[0].Name),
"Custom PVC name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(found.Spec.VolumeClaimTemplates[0].Name),
"Custom PVC name not used in volume mount")
})
})
})
@@ -140,6 +142,8 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(found.Spec.VolumeClaimTemplates[0].Labels[util.SolrPVCStorageLabel]).To(Equal("data"),
"PVC Storage label doesn't match")
g.Expect(found.Spec.VolumeClaimTemplates[0].Labels[util.SolrPVCInstanceLabel]).To(Equal(solrCloud.Name),
"PVC Instance label doesn't match")
g.Expect(found.Spec.VolumeClaimTemplates[0].Labels["base"]).To(Equal("here"),
"Additional PVC label doesn't match")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(found.Spec.VolumeClaimTemplates[0].Name),
"Custom PVC name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(found.Spec.VolumeClaimTemplates[0].Name),
"Custom PVC name not used in volume mount")
})
By("ensuring that the PVCs are deleted and the
finalizer is removed when the SolrCloud is deleted")
@@ -163,13 +167,15 @@ var _ = FDescribe("SolrCloud controller - Storage",
func() {
g.Expect(found.GetFinalizers()).To(HaveLen(0),
"The solrcloud should have no finalizers when ephemeral storage is used")
})
- By("testing the Solr StatefulSet PVC Spec")
+ By("testing the Solr StatefulSet Spec")
expectStatefulSetWithChecks(ctx, solrCloud,
solrCloud.StatefulSetName(), func(g Gomega, found *appsv1.StatefulSet) {
g.Expect(found.Spec.Template.Spec.Volumes).To(HaveLen(3), "Pod has wrong number
of volumes")
g.Expect(found.Spec.VolumeClaimTemplates).To(HaveLen(0), "No data volume claims
should exist when using ephemeral storage")
dataVolume :=
found.Spec.Template.Spec.Volumes[1]
g.Expect(dataVolume.EmptyDir).To(Not(BeNil()),
"The data volume should be an empty-dir.")
g.Expect(dataVolume.HostPath).To(BeNil(), "The
data volume should not be a hostPath volume.")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
})
})
})
@@ -188,13 +194,15 @@ var _ = FDescribe("SolrCloud controller - Storage",
func() {
g.Expect(found.GetFinalizers()).To(HaveLen(0),
"The solrcloud should have no finalizers when ephemeral storage is used")
})
- By("testing the Solr StatefulSet PVC Spec")
+ By("testing the Solr StatefulSet Spec")
expectStatefulSetWithChecks(ctx, solrCloud,
solrCloud.StatefulSetName(), func(g Gomega, found *appsv1.StatefulSet) {
g.Expect(found.Spec.Template.Spec.Volumes).To(HaveLen(3), "Pod has wrong number
of volumes")
g.Expect(found.Spec.VolumeClaimTemplates).To(HaveLen(0), "No data volume claims
should exist when using ephemeral storage")
dataVolume :=
found.Spec.Template.Spec.Volumes[1]
g.Expect(dataVolume.EmptyDir).To(Not(BeNil()),
"The data volume should be an empty-dir.")
g.Expect(dataVolume.HostPath).To(BeNil(), "The
data volume should not be a hostPath volume.")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
})
})
})
@@ -216,7 +224,7 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(found.GetFinalizers()).To(HaveLen(0),
"The solrcloud should have no finalizers when ephemeral storage is used")
})
- By("testing the Solr StatefulSet PVC Spec")
+ By("testing the Solr StatefulSet Spec")
expectStatefulSetWithChecks(ctx, solrCloud,
solrCloud.StatefulSetName(), func(g Gomega, found *appsv1.StatefulSet) {
g.Expect(found.Spec.Template.Spec.Volumes).To(HaveLen(3), "Pod has wrong number
of volumes")
g.Expect(found.Spec.VolumeClaimTemplates).To(HaveLen(0), "No data volume claims
should exist when using ephemeral storage")
@@ -224,6 +232,8 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(dataVolume.EmptyDir).To(Not(BeNil()),
"The data volume should be an empty-dir.")
g.Expect(dataVolume.HostPath).To(BeNil(), "The
data volume should not be a hostPath volume.")
g.Expect(dataVolume.EmptyDir).To(Equal(solrCloud.Spec.StorageOptions.EphemeralStorage.EmptyDir),
"The empty dir settings do not match with what was provided.")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
})
})
})
@@ -246,7 +256,7 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(found.GetFinalizers()).To(HaveLen(0),
"The solrcloud should have no finalizers when ephemeral storage is used")
})
- By("testing the Solr StatefulSet PVC Spec")
+ By("testing the Solr StatefulSet Spec")
expectStatefulSetWithChecks(ctx, solrCloud,
solrCloud.StatefulSetName(), func(g Gomega, found *appsv1.StatefulSet) {
g.Expect(found.Spec.Template.Spec.Volumes).To(HaveLen(3), "Pod has wrong number
of volumes")
g.Expect(found.Spec.VolumeClaimTemplates).To(HaveLen(0), "No data volume claims
should exist when using ephemeral storage")
@@ -254,6 +264,8 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(dataVolume.EmptyDir).To(BeNil(), "The
data volume should not be an empty-dir.")
g.Expect(dataVolume.HostPath).To(Not(BeNil()),
"The data volume should be a hostPath volume.")
g.Expect(dataVolume.HostPath).To(Equal(solrCloud.Spec.StorageOptions.EphemeralStorage.HostPath),
"The hostPath settings do not match with what was provided.")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
})
})
})
@@ -280,7 +292,7 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(found.GetFinalizers()).To(HaveLen(0),
"The solrcloud should have no finalizers when ephemeral storage is used")
})
- By("testing the Solr StatefulSet PVC Spec")
+ By("testing the Solr StatefulSet Spec")
expectStatefulSetWithChecks(ctx, solrCloud,
solrCloud.StatefulSetName(), func(g Gomega, found *appsv1.StatefulSet) {
g.Expect(found.Spec.Template.Spec.Volumes).To(HaveLen(3), "Pod has wrong number
of volumes")
g.Expect(found.Spec.VolumeClaimTemplates).To(HaveLen(0), "No data volume claims
should exist when using ephemeral storage")
@@ -288,6 +300,8 @@ var _ = FDescribe("SolrCloud controller - Storage", func() {
g.Expect(dataVolume.EmptyDir).To(BeNil(), "The
data volume should not be an empty-dir.")
g.Expect(dataVolume.HostPath).To(Not(BeNil()),
"The data volume should be a hostPath volume.")
g.Expect(dataVolume.HostPath).To(Equal(solrCloud.Spec.StorageOptions.EphemeralStorage.HostPath),
"The hostPath settings do not match with what was provided.")
+
g.Expect(found.Spec.Template.Spec.Containers[0].VolumeMounts[0].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
+
g.Expect(found.Spec.Template.Spec.InitContainers[0].VolumeMounts[1].Name).To(Equal(dataVolume.Name),
"Ephemeral Data volume name not used in volume mount")
})
})
})
diff --git a/controllers/util/solr_util.go b/controllers/util/solr_util.go
index 2843153..a7650bf 100644
--- a/controllers/util/solr_util.go
+++ b/controllers/util/solr_util.go
@@ -135,7 +135,7 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud,
solrCloudStatus *solr.SolrCl
},
}
- volumeMounts := []corev1.VolumeMount{{Name: SolrDataVolumeName,
MountPath: "/var/solr/data"}}
+ solrDataVolumeName := SolrDataVolumeName
var pvcs []corev1.PersistentVolumeClaim
if solrCloud.UsesPersistentStorage() {
@@ -143,7 +143,9 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud,
solrCloudStatus *solr.SolrCl
// Set the default name of the pvc
if pvc.ObjectMeta.Name == "" {
- pvc.ObjectMeta.Name = SolrDataVolumeName
+ pvc.ObjectMeta.Name = solrDataVolumeName
+ } else {
+ solrDataVolumeName = pvc.ObjectMeta.Name
}
// Set some defaults in the PVC Spec
@@ -177,7 +179,7 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud,
solrCloudStatus *solr.SolrCl
}
} else {
ephemeralVolume := corev1.Volume{
- Name: SolrDataVolumeName,
+ Name: solrDataVolumeName,
VolumeSource: corev1.VolumeSource{},
}
if solrCloud.Spec.StorageOptions.EphemeralStorage != nil {
@@ -194,6 +196,8 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud,
solrCloudStatus *solr.SolrCl
solrVolumes = append(solrVolumes, ephemeralVolume)
}
+ volumeMounts := []corev1.VolumeMount{{Name: solrDataVolumeName,
MountPath: "/var/solr/data"}}
+
// Add necessary specs for backupRepos
backupEnvVars := make([]corev1.EnvVar, 0)
for _, repo := range solrCloud.Spec.BackupRepositories {
@@ -380,7 +384,7 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud,
solrCloudStatus *solr.SolrCl
Value: strings.Join(allSolrOpts, " "),
})
- initContainers := generateSolrSetupInitContainers(solrCloud,
solrCloudStatus, SolrDataVolumeName, security)
+ initContainers := generateSolrSetupInitContainers(solrCloud,
solrCloudStatus, solrDataVolumeName, security)
// Add user defined additional init containers
if customPodOptions != nil && len(customPodOptions.InitContainers) > 0 {
diff --git a/helm/solr-operator/Chart.yaml b/helm/solr-operator/Chart.yaml
index 698840b..6c89772 100644
--- a/helm/solr-operator/Chart.yaml
+++ b/helm/solr-operator/Chart.yaml
@@ -96,6 +96,13 @@ annotations:
links:
- name: Github PR
url: https://github.com/apache/solr-operator/pull/418
+ - kind: fixed
+ description: Fixed issue with StatefulSet volumeMounts for PVCs with
custom names.
+ links:
+ - name: Github Issue
+ url: https://github.com/apache/solr-operator/issues/438
+ - name: Github PR
+ url: https://github.com/apache/solr-operator/pull/439
artifacthub.io/images: |
- name: solr-operator
image: apache/solr-operator:v0.6.0-prerelease