From 38a884aa047891f272f35e607080ed5034433219 Mon Sep 17 00:00:00 2001 From: xiangqian Date: Wed, 29 May 2019 21:30:42 -0700 Subject: [PATCH] using storage class provisioner instead of annotation of a pv for external provisioner minor updates --- .../volume/persistentvolume/pv_controller.go | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/pkg/controller/volume/persistentvolume/pv_controller.go b/pkg/controller/volume/persistentvolume/pv_controller.go index a630b052c59..d37516437c4 100644 --- a/pkg/controller/volume/persistentvolume/pv_controller.go +++ b/pkg/controller/volume/persistentvolume/pv_controller.go @@ -1733,26 +1733,27 @@ func (ctrl *PersistentVolumeController) getProvisionerNameFromVolume(volume *v1. if err != nil { return "N/A" } - // if external provisioner was used for provisioning, - // the volume MUST have annotation of AnnDynamicallyProvisioned, use the value - // as the provisioner name - if plugin == nil { - return volume.Annotations[pvutil.AnnDynamicallyProvisioned] - } else if plugin.IsMigratedToCSI() { - // in case where a plugin has been migrated to CSI, - // use the CSI name instead of in-tree name - storageClass := v1helper.GetPersistentVolumeClass(volume) - class, err := ctrl.classLister.Get(storageClass) - if err != nil { - return "N/A" - } - provisionerName, err := ctrl.getCSINameFromIntreeName(class.Provisioner) - if err != nil { - return "N/A" - } - return provisionerName + if plugin != nil && !plugin.IsMigratedToCSI() { + return plugin.GetPluginName() } - return plugin.GetPluginName() + // If reached here, Either an external provisioner was used for provisioning + // or a plugin has been migrated to CSI. + // If an external provisioner was used, i.e., plugin == nil, instead of using + // the AnnDynamicallyProvisioned annotation value, use the storageClass's Provisioner + // field to avoid explosion of the metric in the cases like local storage provisioner + // tagging a volume with arbitrary provisioner names + storageClass := v1helper.GetPersistentVolumeClass(volume) + class, err := ctrl.classLister.Get(storageClass) + if err != nil { + return "N/A" + } + if plugin != nil { + provisionerName, err := ctrl.getCSINameFromIntreeName(class.Provisioner) + if err == nil { + return provisionerName + } + } + return class.Provisioner } // obtain plugin/external provisioner name from plugin and storage class