From e2ebe734c47eb0761357645ee31a78210f781507 Mon Sep 17 00:00:00 2001 From: Vicente Cheng Date: Wed, 16 Oct 2024 15:18:52 +0800 Subject: [PATCH] webhook: should also consider the old `Spec.Filesystem.Provisioned` - sync the `Spec.Provision` and `Spec.Filesystem.Provisioned` Signed-off-by: Vicente Cheng --- pkg/controller/blockdevice/controller.go | 1 - pkg/provisioner/longhornv1.go | 3 +++ pkg/webhook/blockdevice/mutator.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/controller/blockdevice/controller.go b/pkg/controller/blockdevice/controller.go index 8d235e22..2eeb6f54 100644 --- a/pkg/controller/blockdevice/controller.go +++ b/pkg/controller/blockdevice/controller.go @@ -218,7 +218,6 @@ func (c *Controller) generateProvisioner(device *diskv1.BlockDevice) (provisione // upgrade case, we need to update some fields if device.Spec.Provisioner == nil && device.Status.ProvisionPhase == diskv1.ProvisionPhaseProvisioned { device.Spec.Provision = true - device.Spec.FileSystem.Provisioned = false provisionerLHV1 := &diskv1.LonghornProvisionerInfo{ EngineVersion: provisioner.TypeLonghornV1, } diff --git a/pkg/provisioner/longhornv1.go b/pkg/provisioner/longhornv1.go index 8dc49fe4..8f966f54 100644 --- a/pkg/provisioner/longhornv1.go +++ b/pkg/provisioner/longhornv1.go @@ -97,6 +97,8 @@ func (p *LonghornV1Provisioner) Provision() (bool, error) { } if (synced && !diskv1.DiskAddedToNode.IsTrue(p.device)) || provisioned { + // mark `filesystem.provisioned` to true, that the mutator could work + p.device.Spec.FileSystem.Provisioned = true logrus.Debugf("Set blockdevice CRD (%v) to provisioned", p.device) msg := fmt.Sprintf("Added disk %s to longhorn node `%s` as an additional disk", p.device.Name, p.nodeObj.Name) setCondDiskAddedToNodeTrue(p.device, msg, diskv1.ProvisionPhaseProvisioned) @@ -111,6 +113,7 @@ func (p *LonghornV1Provisioner) UnProvision() (bool, error) { // inner functions updateProvisionPhaseUnprovisioned := func() { + p.device.Spec.FileSystem.Provisioned = false msg := fmt.Sprintf("Disk not in longhorn node `%s`", p.nodeObj.Name) setCondDiskAddedToNodeFalse(p.device, msg, diskv1.ProvisionPhaseUnprovisioned) } diff --git a/pkg/webhook/blockdevice/mutator.go b/pkg/webhook/blockdevice/mutator.go index ceb5a509..4a30cd61 100644 --- a/pkg/webhook/blockdevice/mutator.go +++ b/pkg/webhook/blockdevice/mutator.go @@ -62,7 +62,7 @@ func (m *Mutator) Update(req *admission.Request, oldObj, newObj runtime.Object) return patchOps, nil } // means we need to disable, align the .spec.filesystem.provisioned with .spec.provision -> false - if prevProvision && !newBd.Spec.FileSystem.Provisioned { + if prevProvision && !newBd.Spec.FileSystem.Provisioned && oldBd.Spec.FileSystem.Provisioned { if newBd.Spec.Provision { patchProvision := admission.PatchOp{ Op: admission.PatchOpReplace,