@@ -20,27 +20,18 @@ import (
20
20
"context"
21
21
"errors"
22
22
"fmt"
23
- "os"
24
23
"time"
25
24
26
25
"github.com/kubernetes-csi/external-resizer/pkg/csi"
27
26
28
27
"k8s.io/api/core/v1"
29
28
"k8s.io/apimachinery/pkg/api/resource"
30
29
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31
- "k8s.io/apimachinery/pkg/util/sets"
32
- "k8s.io/apimachinery/pkg/util/validation"
33
30
"k8s.io/client-go/informers"
34
31
"k8s.io/client-go/kubernetes"
35
- storagev1listers "k8s.io/client-go/listers/storage/v1"
36
32
"k8s.io/klog"
37
33
)
38
34
39
- const (
40
- resizerSecretNameKey = "csi.storage.k8s.io/resizer-secret-name"
41
- resizerSecretNamespaceKey = "csi.storage.k8s.io/resizer-secret-namespace"
42
- )
43
-
44
35
var (
45
36
controllerServiceNotSupportErr = errors .New ("CSI driver does not support controller service" )
46
37
resizeNotSupportErr = errors .New ("CSI driver neither supports controller resize nor node resize" )
@@ -101,7 +92,6 @@ func NewResizerFromClient(
101
92
timeout : timeout ,
102
93
103
94
k8sClient : k8sClient ,
104
- scLister : informerFactory .Storage ().V1 ().StorageClasses ().Lister (),
105
95
}, nil
106
96
}
107
97
@@ -111,7 +101,6 @@ type csiResizer struct {
111
101
timeout time.Duration
112
102
113
103
k8sClient kubernetes.Interface
114
- scLister storagev1listers.StorageClassLister
115
104
}
116
105
117
106
func (r * csiResizer ) Name () string {
@@ -144,18 +133,10 @@ func (r *csiResizer) Resize(pv *v1.PersistentVolume, requestSize resource.Quanti
144
133
}
145
134
146
135
var secrets map [string ]string
147
- // Get expand secrets from StorageClass parameters.
148
- scName := pv .Spec .StorageClassName
149
- if len (scName ) > 0 {
150
- storageClass , err := r .scLister .Get (scName )
151
- if err != nil {
152
- return oldSize , false , fmt .Errorf ("get StorageClass %s failed: %v" , scName , err )
153
- }
154
- expandSecretRef , err := getSecretReference (storageClass .Parameters , pv .Name )
155
- if err != nil {
156
- return oldSize , false , err
157
- }
158
- secrets , err = getCredentials (r .k8sClient , expandSecretRef )
136
+ secreRef := source .ControllerExpandSecretRef
137
+ if secreRef != nil {
138
+ var err error
139
+ secrets , err = getCredentials (r .k8sClient , secreRef )
159
140
if err != nil {
160
141
return oldSize , false , err
161
142
}
@@ -198,89 +179,6 @@ func timeoutCtx(timeout time.Duration) (context.Context, context.CancelFunc) {
198
179
return context .WithTimeout (context .Background (), timeout )
199
180
}
200
181
201
- // verifyAndGetSecretNameAndNamespaceTemplate gets the values (templates) associated
202
- // with the parameters specified in "secret" and verifies that they are specified correctly.
203
- func verifyAndGetSecretNameAndNamespaceTemplate (storageClassParams map [string ]string ) (string , string , error ) {
204
- nameTemplate := storageClassParams [resizerSecretNameKey ]
205
- namespaceTemplate := storageClassParams [resizerSecretNamespaceKey ]
206
-
207
- // Name and namespaces are both specified.
208
- if nameTemplate != "" && namespaceTemplate != "" {
209
- return nameTemplate , namespaceTemplate , nil
210
- }
211
-
212
- // No secrets specified
213
- if nameTemplate == "" && namespaceTemplate == "" {
214
- return "" , "" , nil
215
- }
216
-
217
- // Only one of the names and namespaces is set.
218
- return "" , "" , errors .New ("resizer secrets specified in parameters but value of either namespace or name is empty" )
219
- }
220
-
221
- // getSecretReference returns a reference to the secret specified in the given nameTemplate
222
- // and namespaceTemplate, or an error if the templates are not specified correctly.
223
- // no lookup of the referenced secret is performed, and the secret may or may not exist.
224
- //
225
- // supported tokens for name resolution:
226
- // - ${pv.name}
227
- // - ${pvc.namespace}
228
- // - ${pvc.name}
229
- // - ${pvc.annotations['ANNOTATION_KEY']} (e.g. ${pvc.annotations['example.com/node-publish-secret-name']})
230
- //
231
- // supported tokens for namespace resolution:
232
- // - ${pv.name}
233
- // - ${pvc.namespace}
234
- //
235
- // an error is returned in the following situations:
236
- // - the nameTemplate or namespaceTemplate contains a token that cannot be resolved
237
- // - the resolved name is not a valid secret name
238
- // - the resolved namespace is not a valid namespace name
239
- func getSecretReference (storageClassParams map [string ]string , pvName string ) (* v1.SecretReference , error ) {
240
- nameTemplate , namespaceTemplate , err := verifyAndGetSecretNameAndNamespaceTemplate (storageClassParams )
241
- if err != nil {
242
- return nil , fmt .Errorf ("failed to get name and namespace template from params: %v" , err )
243
- }
244
- if nameTemplate == "" && namespaceTemplate == "" {
245
- return nil , nil
246
- }
247
-
248
- // Secret name and namespace template can make use of the PV name.
249
- // Note that neither of those things are under the control of the user.
250
- params := map [string ]string {"pv.name" : pvName }
251
- resolvedNamespace , err := resolveTemplate ("namespace" , namespaceTemplate , params )
252
- if err != nil {
253
- return nil , fmt .Errorf ("error resolving secret namespace %q: %v" , namespaceTemplate , err )
254
- }
255
- resolvedName , err := resolveTemplate ("name" , nameTemplate , params )
256
- if err != nil {
257
- return nil , fmt .Errorf ("error resolving value %q: %v" , nameTemplate , err )
258
- }
259
-
260
- return & v1.SecretReference {Name : resolvedName , Namespace : resolvedNamespace }, nil
261
- }
262
-
263
- func resolveTemplate (field , template string , params map [string ]string ) (string , error ) {
264
- missingParams := sets .NewString ()
265
- resolved := os .Expand (template , func (k string ) string {
266
- v , ok := params [k ]
267
- if ! ok {
268
- missingParams .Insert (k )
269
- }
270
- return v
271
- })
272
- if missingParams .Len () > 0 {
273
- return "" , fmt .Errorf ("invalid tokens: %q" , missingParams .List ())
274
- }
275
- if len (validation .IsDNS1123Label (resolved )) > 0 {
276
- if template != resolved {
277
- return "" , fmt .Errorf ("%q resolved to %q which is not a valid %s name" , template , resolved , field )
278
- }
279
- return "" , fmt .Errorf ("%q is not a valid %s name" , template , field )
280
- }
281
- return resolved , nil
282
- }
283
-
284
182
func getCredentials (k8sClient kubernetes.Interface , ref * v1.SecretReference ) (map [string ]string , error ) {
285
183
if ref == nil {
286
184
return nil , nil
0 commit comments