@@ -105,6 +105,9 @@ const (
105105 prefixedNodeExpandSecretNameKey = csiParameterPrefix + "node-expand-secret-name"
106106 prefixedNodeExpandSecretNamespaceKey = 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
110113 provisionerSecretNameKey = "csiProvisionerSecretName"
@@ -148,6 +151,11 @@ const (
148151 annDeletionProvisionerSecretRefName = "volume.kubernetes.io/provisioner-deletion-secret-name"
149152 annDeletionProvisionerSecretRefNamespace = "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+
151159 snapshotNotBound = "snapshot %s not bound"
152160
153161 pvcCloneFinalizer = "provisioner.storage.kubernetes.io/cloning-protection"
@@ -206,6 +214,12 @@ var (
206214 secretNameKey : prefixedNodeExpandSecretNameKey ,
207215 secretNamespaceKey : prefixedNodeExpandSecretNamespaceKey ,
208216 }
217+
218+ controllerModifySecretParams = secretParamsMap {
219+ name : "ControllerModify" ,
220+ secretNameKey : prefixedControllerModifySecretNameKey ,
221+ secretNamespaceKey : prefixedControllerModifySecretNamespaceKey ,
222+ }
209223)
210224
211225// ProvisionerCSITranslator contains the set of CSI Translation functionality
@@ -541,7 +555,7 @@ func (p *csiProvisioner) getVolumeCapabilities(
541555 return volumeCaps , nil
542556}
543557
544- type deletionSecretParams struct {
558+ type annotatedSecretParams struct {
545559 name string
546560 namespace string
547561}
@@ -551,7 +565,8 @@ type prepareProvisionResult struct {
551565 migratedVolume bool
552566 req * csi.CreateVolumeRequest
553567 csiPVSource * v1.CSIPersistentVolumeSource
554- provDeletionSecrets * deletionSecretParams
568+ provDeletionSecrets * annotatedSecretParams
569+ provModifySecrets * annotatedSecretParams
555570}
556571
557572// prepareProvision does non-destructive parameter checking and preparations for provisioning a volume.
@@ -743,6 +758,10 @@ func (p *csiProvisioner) prepareProvision(ctx context.Context, claim *v1.Persist
743758 if err != nil {
744759 return nil , controller .ProvisioningNoChange , err
745760 }
761+ controllerModifySecretRef , err := getSecretReference (controllerModifySecretParams , sc .Parameters , pvName , claim )
762+ if err != nil {
763+ return nil , controller .ProvisioningNoChange , err
764+ }
746765 csiPVSource := & v1.CSIPersistentVolumeSource {
747766 Driver : p .driverName ,
748767 // VolumeHandle and VolumeAttributes will be added after provisioning.
@@ -764,13 +783,21 @@ func (p *csiProvisioner) prepareProvision(ctx context.Context, claim *v1.Persist
764783 req .Parameters [pvcNamespaceKey ] = claim .GetNamespace ()
765784 req .Parameters [pvNameKey ] = pvName
766785 }
767- deletionAnnSecrets := new (deletionSecretParams )
768786
787+ deletionAnnSecrets := new (annotatedSecretParams )
769788 if provisionerSecretRef != nil {
770789 deletionAnnSecrets .name = provisionerSecretRef .Name
771790 deletionAnnSecrets .namespace = provisionerSecretRef .Namespace
772791 }
773792
793+ var modifyAnnSecrets * annotatedSecretParams
794+ if controllerModifySecretRef != nil {
795+ modifyAnnSecrets = & annotatedSecretParams {
796+ name : controllerModifySecretRef .Name ,
797+ namespace : controllerModifySecretRef .Namespace ,
798+ }
799+ }
800+
774801 if vacName != "" {
775802 vac , err := p .client .StorageV1 ().VolumeAttributesClasses ().Get (ctx , vacName , metav1.GetOptions {})
776803 if err != nil {
@@ -790,6 +817,7 @@ func (p *csiProvisioner) prepareProvision(ctx context.Context, claim *v1.Persist
790817 req : & req ,
791818 csiPVSource : csiPVSource ,
792819 provDeletionSecrets : deletionAnnSecrets ,
820+ provModifySecrets : modifyAnnSecrets ,
793821 }, controller .ProvisioningNoChange , nil
794822
795823}
@@ -872,6 +900,7 @@ func (p *csiProvisioner) Provision(ctx context.Context, options controller.Provi
872900 klog .V (3 ).Infof ("create volume rep: %+v" , rep .Volume )
873901 }
874902 volumeAttributes := map [string ]string {provisionerIDKey : p .identity }
903+
875904 maps .Copy (volumeAttributes , rep .Volume .VolumeContext )
876905 respCap := rep .GetVolume ().GetCapacityBytes ()
877906
@@ -947,6 +976,13 @@ func (p *csiProvisioner) Provision(ctx context.Context, options controller.Provi
947976 metav1 .SetMetaDataAnnotation (& pv .ObjectMeta , annDeletionProvisionerSecretRefNamespace , "" )
948977 }
949978
979+ // Set annModifyControllerSecretRefName and namespace in PV object when modify secrets are configured.
980+ if result .provModifySecrets != nil {
981+ klog .V (5 ).Infof ("createVolumeOperation: set annotation [%s/%s] on pv [%s]." , annModifyControllerSecretRefNamespace , annModifyControllerSecretRefName , pv .Name )
982+ metav1 .SetMetaDataAnnotation (& pv .ObjectMeta , annModifyControllerSecretRefName , result .provModifySecrets .name )
983+ metav1 .SetMetaDataAnnotation (& pv .ObjectMeta , annModifyControllerSecretRefNamespace , result .provModifySecrets .namespace )
984+ }
985+
950986 if options .StorageClass .ReclaimPolicy != nil {
951987 pv .Spec .PersistentVolumeReclaimPolicy = * options .StorageClass .ReclaimPolicy
952988 }
@@ -1034,6 +1070,8 @@ func removePrefixedParameters(param map[string]string) (map[string]string, error
10341070 case prefixedDefaultSecretNamespaceKey :
10351071 case prefixedNodeExpandSecretNameKey :
10361072 case prefixedNodeExpandSecretNamespaceKey :
1073+ case prefixedControllerModifySecretNameKey :
1074+ case prefixedControllerModifySecretNamespaceKey :
10371075 default :
10381076 return map [string ]string {}, fmt .Errorf ("found unknown parameter key \" %s\" with reserved namespace %s" , k , csiParameterPrefix )
10391077 }
0 commit comments