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

Reply via email to