@@ -105,6 +105,9 @@ const (
105105prefixedNodeExpandSecretNameKey = csiParameterPrefix + "node-expand-secret-name"
106106prefixedNodeExpandSecretNamespaceKey = csiParameterPrefix + "node-expand-secret-namespace"
107107
108+ prefixedControllerModifySecretNameKey = csiParameterPrefix + "controller-modify-secret-name"
109+ prefixedControllerModifySecretNamespaceKey = csiParameterPrefix + "controller-modify-secret-namespace"
110+
108111// [Deprecated] CSI Parameters that are put into fields but
109112// NOT stripped from the parameters passed to CreateVolume
110113provisionerSecretNameKey = "csiProvisionerSecretName"
@@ -148,6 +151,11 @@ const (
148151annDeletionProvisionerSecretRefName = "volume.kubernetes.io/provisioner-deletion-secret-name"
149152annDeletionProvisionerSecretRefNamespace = "volume.kubernetes.io/provisioner-deletion-secret-namespace"
150153
154+ // Annotation for secret name and namespace will be added to the pv object
155+ // and used for ControllerModifyVolume procedures by the external-resizer
156+ annModifyControllerSecretRefName = "volume.kubernetes.io/controller-modify-secret-name"
157+ annModifyControllerSecretRefNamespace = "volume.kubernetes.io/controller-modify-secret-namespace"
158+
151159snapshotNotBound = "snapshot %s not bound"
152160
153161pvcCloneFinalizer = "provisioner.storage.kubernetes.io/cloning-protection"
@@ -205,6 +213,12 @@ var (
205213secretNameKey : prefixedNodeExpandSecretNameKey ,
206214secretNamespaceKey : prefixedNodeExpandSecretNamespaceKey ,
207215}
216+
217+ controllerModifySecretParams = secretParamsMap {
218+ name : "ControllerModify" ,
219+ secretNameKey : prefixedControllerModifySecretNameKey ,
220+ secretNamespaceKey : prefixedControllerModifySecretNamespaceKey ,
221+ }
208222)
209223
210224// ProvisionerCSITranslator contains the set of CSI Translation functionality
@@ -540,7 +554,7 @@ func (p *csiProvisioner) getVolumeCapabilities(
540554return volumeCaps , nil
541555}
542556
543- type deletionSecretParams struct {
557+ type annotatedSecretParams struct {
544558name string
545559namespace string
546560}
@@ -550,7 +564,8 @@ type prepareProvisionResult struct {
550564migratedVolume bool
551565req * csi.CreateVolumeRequest
552566csiPVSource * v1.CSIPersistentVolumeSource
553- provDeletionSecrets * deletionSecretParams
567+ provDeletionSecrets * annotatedSecretParams
568+ provModifySecrets * annotatedSecretParams
554569}
555570
556571// prepareProvision does non-destructive parameter checking and preparations for provisioning a volume.
@@ -739,6 +754,10 @@ func (p *csiProvisioner) prepareProvision(ctx context.Context, claim *v1.Persist
739754if err != nil {
740755return nil , controller .ProvisioningNoChange , err
741756}
757+ controllerModifySecretRef , err := getSecretReference (controllerModifySecretParams , sc .Parameters , pvName , claim )
758+ if err != nil {
759+ return nil , controller .ProvisioningNoChange , err
760+ }
742761csiPVSource := & v1.CSIPersistentVolumeSource {
743762Driver : p .driverName ,
744763// VolumeHandle and VolumeAttributes will be added after provisioning.
@@ -760,13 +779,21 @@ func (p *csiProvisioner) prepareProvision(ctx context.Context, claim *v1.Persist
760779req .Parameters [pvcNamespaceKey ] = claim .GetNamespace ()
761780req .Parameters [pvNameKey ] = pvName
762781}
763- deletionAnnSecrets := new (deletionSecretParams )
764782
783+ deletionAnnSecrets := new (annotatedSecretParams )
765784if provisionerSecretRef != nil {
766785deletionAnnSecrets .name = provisionerSecretRef .Name
767786deletionAnnSecrets .namespace = provisionerSecretRef .Namespace
768787}
769788
789+ var modifyAnnSecrets * annotatedSecretParams
790+ if controllerModifySecretRef != nil {
791+ modifyAnnSecrets = & annotatedSecretParams {
792+ name : controllerModifySecretRef .Name ,
793+ namespace : controllerModifySecretRef .Namespace ,
794+ }
795+ }
796+
770797if vacName != "" {
771798vac , err := p .client .StorageV1 ().VolumeAttributesClasses ().Get (ctx , vacName , metav1.GetOptions {})
772799if err != nil {
@@ -786,6 +813,7 @@ func (p *csiProvisioner) prepareProvision(ctx context.Context, claim *v1.Persist
786813req : & req ,
787814csiPVSource : csiPVSource ,
788815provDeletionSecrets : deletionAnnSecrets ,
816+ provModifySecrets : modifyAnnSecrets ,
789817}, controller .ProvisioningNoChange , nil
790818
791819}
@@ -868,6 +896,7 @@ func (p *csiProvisioner) Provision(ctx context.Context, options controller.Provi
868896klog .V (3 ).Infof ("create volume rep: %+v" , rep .Volume )
869897}
870898volumeAttributes := map [string ]string {provisionerIDKey : p .identity }
899+
871900maps .Copy (volumeAttributes , rep .Volume .VolumeContext )
872901respCap := rep .GetVolume ().GetCapacityBytes ()
873902
@@ -943,6 +972,13 @@ func (p *csiProvisioner) Provision(ctx context.Context, options controller.Provi
943972metav1 .SetMetaDataAnnotation (& pv .ObjectMeta , annDeletionProvisionerSecretRefNamespace , "" )
944973}
945974
975+ // Set annModifyControllerSecretRefName and namespace in PV object when modify secrets are configured.
976+ if result .provModifySecrets != nil {
977+ klog .V (5 ).Infof ("createVolumeOperation: set annotation [%s/%s] on pv [%s]." , annModifyControllerSecretRefNamespace , annModifyControllerSecretRefName , pv .Name )
978+ metav1 .SetMetaDataAnnotation (& pv .ObjectMeta , annModifyControllerSecretRefName , result .provModifySecrets .name )
979+ metav1 .SetMetaDataAnnotation (& pv .ObjectMeta , annModifyControllerSecretRefNamespace , result .provModifySecrets .namespace )
980+ }
981+
946982if options .StorageClass .ReclaimPolicy != nil {
947983pv .Spec .PersistentVolumeReclaimPolicy = * options .StorageClass .ReclaimPolicy
948984}
@@ -1030,6 +1066,8 @@ func removePrefixedParameters(param map[string]string) (map[string]string, error
10301066case prefixedDefaultSecretNamespaceKey :
10311067case prefixedNodeExpandSecretNameKey :
10321068case prefixedNodeExpandSecretNamespaceKey :
1069+ case prefixedControllerModifySecretNameKey :
1070+ case prefixedControllerModifySecretNamespaceKey :
10331071default :
10341072return map [string ]string {}, fmt .Errorf ("found unknown parameter key \" %s\" with reserved namespace %s" , k , csiParameterPrefix )
10351073}
0 commit comments