@@ -23,6 +23,7 @@ import (
2323 "hash/fnv"
2424 "net/http"
2525 "path/filepath"
26+ "slices"
2627 "strings"
2728 "sync"
2829 "time"
@@ -46,11 +47,10 @@ type Discoverer struct {
4647 Labels map [string ]string
4748 // ProcTable is a reference to running processes so that we can prevent PV from being created while
4849 // it is being cleaned
49- CleanupTracker * deleter.CleanupStatusTracker
50- nodeAffinityAnn string
51- nodeAffinity * v1.VolumeNodeAffinity
52- classLister storagev1listers.StorageClassLister
53- ownerReference * metav1.OwnerReference
50+ CleanupTracker * deleter.CleanupStatusTracker
51+ nodeSelector * v1.NodeSelector
52+ classLister storagev1listers.StorageClassLister
53+ ownerReference * metav1.OwnerReference
5454
5555 Readyz * readyzCheck
5656}
@@ -106,38 +106,17 @@ func NewDiscoverer(config *common.RuntimeConfig, cleanupTracker *deleter.Cleanup
106106 return nil , fmt .Errorf ("Failed to generate owner reference: %v" , err )
107107 }
108108
109- if config .UseAlphaAPI {
110- nodeAffinity , err := generateNodeAffinity (config .Node )
111- if err != nil {
112- return nil , fmt .Errorf ("Failed to generate node affinity: %v" , err )
113- }
114- tmpAnnotations := map [string ]string {}
115- err = StorageNodeAffinityToAlphaAnnotation (tmpAnnotations , nodeAffinity )
116- if err != nil {
117- return nil , fmt .Errorf ("Failed to convert node affinity to alpha annotation: %v" , err )
118- }
119- return & Discoverer {
120- RuntimeConfig : config ,
121- Labels : labelMap ,
122- CleanupTracker : cleanupTracker ,
123- classLister : sharedInformer .Lister (),
124- nodeAffinityAnn : tmpAnnotations [common .AlphaStorageNodeAffinityAnnotation ],
125- ownerReference : ownerRef ,
126- Readyz : & readyzCheck {},
127- }, nil
128- }
129-
130- volumeNodeAffinity , err := generateVolumeNodeAffinity (config .Node )
109+ nodeSelector , err := generateNodeSelector (config .Node )
131110 if err != nil {
132- return nil , fmt .Errorf ("Failed to generate volume node affinity : %v" , err )
111+ return nil , fmt .Errorf ("Failed to generate node selector : %v" , err )
133112 }
134113
135114 return & Discoverer {
136115 RuntimeConfig : config ,
137116 Labels : labelMap ,
138117 CleanupTracker : cleanupTracker ,
139118 classLister : sharedInformer .Lister (),
140- nodeAffinity : volumeNodeAffinity ,
119+ nodeSelector : nodeSelector ,
141120 ownerReference : ownerRef ,
142121 Readyz : & readyzCheck {},
143122 }, nil
@@ -160,7 +139,7 @@ func generateOwnerReference(node *v1.Node) (*metav1.OwnerReference, error) {
160139 }, nil
161140}
162141
163- func generateNodeAffinity (node * v1.Node ) (* v1.NodeAffinity , error ) {
142+ func generateNodeSelector (node * v1.Node ) (* v1.NodeSelector , error ) {
164143 if node .Labels == nil {
165144 return nil , fmt .Errorf ("Node does not have labels" )
166145 }
@@ -169,42 +148,14 @@ func generateNodeAffinity(node *v1.Node) (*v1.NodeAffinity, error) {
169148 return nil , fmt .Errorf ("Node does not have expected label %s" , common .NodeLabelKey )
170149 }
171150
172- return & v1.NodeAffinity {
173- RequiredDuringSchedulingIgnoredDuringExecution : & v1.NodeSelector {
174- NodeSelectorTerms : []v1.NodeSelectorTerm {
175- {
176- MatchExpressions : []v1.NodeSelectorRequirement {
177- {
178- Key : common .NodeLabelKey ,
179- Operator : v1 .NodeSelectorOpIn ,
180- Values : []string {nodeValue },
181- },
182- },
183- },
184- },
185- },
186- }, nil
187- }
188-
189- func generateVolumeNodeAffinity (node * v1.Node ) (* v1.VolumeNodeAffinity , error ) {
190- if node .Labels == nil {
191- return nil , fmt .Errorf ("Node does not have labels" )
192- }
193- nodeValue , found := node .Labels [common .NodeLabelKey ]
194- if ! found {
195- return nil , fmt .Errorf ("Node does not have expected label %s" , common .NodeLabelKey )
196- }
197-
198- return & v1.VolumeNodeAffinity {
199- Required : & v1.NodeSelector {
200- NodeSelectorTerms : []v1.NodeSelectorTerm {
201- {
202- MatchExpressions : []v1.NodeSelectorRequirement {
203- {
204- Key : common .NodeLabelKey ,
205- Operator : v1 .NodeSelectorOpIn ,
206- Values : []string {nodeValue },
207- },
151+ return & v1.NodeSelector {
152+ NodeSelectorTerms : []v1.NodeSelectorTerm {
153+ {
154+ MatchExpressions : []v1.NodeSelectorRequirement {
155+ {
156+ Key : common .NodeLabelKey ,
157+ Operator : v1 .NodeSelectorOpIn ,
158+ Values : []string {nodeValue },
208159 },
209160 },
210161 },
@@ -437,11 +388,25 @@ func (d *Discoverer) createPV(file, class string, reclaimPolicy v1.PersistentVol
437388 OwnerReference : d .ownerReference ,
438389 }
439390
391+ volumeNodeSelector := & v1.NodeSelector {
392+ NodeSelectorTerms : slices .Concat (d .nodeSelector .NodeSelectorTerms , config .Selector ),
393+ }
394+
440395 if d .UseAlphaAPI {
396+ nodeAffinity := & v1.NodeAffinity {
397+ RequiredDuringSchedulingIgnoredDuringExecution : volumeNodeSelector ,
398+ }
399+ tmpAnnotations := map [string ]string {}
400+ err := StorageNodeAffinityToAlphaAnnotation (tmpAnnotations , nodeAffinity )
401+ if err != nil {
402+ return fmt .Errorf ("error converting volume affinity to alpha annotation: %v" , err )
403+ }
441404 localPVConfig .UseAlphaAPI = true
442- localPVConfig .AffinityAnn = d . nodeAffinityAnn
405+ localPVConfig .AffinityAnn = tmpAnnotations [ common . AlphaStorageNodeAffinityAnnotation ]
443406 } else {
444- localPVConfig .NodeAffinity = d .nodeAffinity
407+ localPVConfig .NodeAffinity = & v1.VolumeNodeAffinity {
408+ Required : volumeNodeSelector ,
409+ }
445410 }
446411
447412 if config .FsType != "" {
0 commit comments