diff --git a/internal/controllers/vgmanager/controller.go b/internal/controllers/vgmanager/controller.go index 8a764e711..68040e717 100644 --- a/internal/controllers/vgmanager/controller.go +++ b/internal/controllers/vgmanager/controller.go @@ -678,7 +678,25 @@ func (r *Reconciler) deleteRemovedDevices( devicesToRemove := make([]string, 0) for _, pv := range currentVG.PVs { - if !slices.Contains(userProvidedMappings, pv.PvName) { + // Check if the PV matches any user-provided path + // We need to handle symlinks: the PV might be stored as /dev/mapper/encrypted + // while the user path resolves to /dev/dm-0, or vice versa + pvMatched := false + + // First, try direct match with PV name as-is + if slices.Contains(userProvidedMappings, pv.PvName) { + pvMatched = true + } + + // If no direct match, try resolving the PV name and compare + if !pvMatched { + resolvedPvName, err := resolver.Resolve(pv.PvName) + if err == nil && slices.Contains(userProvidedMappings, resolvedPvName) { + pvMatched = true + } + } + + if !pvMatched { devicesToRemove = append(devicesToRemove, pv.PvName) } } diff --git a/test/e2e/lvm_cluster_test.go b/test/e2e/lvm_cluster_test.go index 72301a553..c4a19d7b6 100644 --- a/test/e2e/lvm_cluster_test.go +++ b/test/e2e/lvm_cluster_test.go @@ -72,8 +72,8 @@ func lvmClusterTest() { Describe("Storage Class", Serial, func() { It("should become ready without a default storageclass", func(ctx SpecContext) { // set default to false - for _, dc := range cluster.Spec.Storage.DeviceClasses { - dc.Default = false + for i := range cluster.Spec.Storage.DeviceClasses { + cluster.Spec.Storage.DeviceClasses[i].Default = false } CreateResource(ctx, cluster) @@ -83,8 +83,8 @@ func lvmClusterTest() { Describe("Thick Provisioning", Serial, func() { It("should become ready if ThinPoolConfig is empty (thick provisioning)", func(ctx SpecContext) { - for _, dc := range cluster.Spec.Storage.DeviceClasses { - dc.ThinPoolConfig = nil + for i := range cluster.Spec.Storage.DeviceClasses { + cluster.Spec.Storage.DeviceClasses[i].ThinPoolConfig = nil } CreateResource(ctx, cluster) VerifyLVMSSetup(ctx, cluster) diff --git a/test/e2e/lvm_pvc_test.go b/test/e2e/lvm_pvc_test.go index 9c7b9a3bd..db4c965f4 100644 --- a/test/e2e/lvm_pvc_test.go +++ b/test/e2e/lvm_pvc_test.go @@ -113,8 +113,8 @@ func pvcTestThickProvisioning() { cluster = GetDefaultTestLVMClusterTemplate() // set ThinPoolConfig to nil - for _, dc := range cluster.Spec.Storage.DeviceClasses { - dc.ThinPoolConfig = nil + for i := range cluster.Spec.Storage.DeviceClasses { + cluster.Spec.Storage.DeviceClasses[i].ThinPoolConfig = nil } CreateResource(ctx, cluster)