@@ -28,96 +28,81 @@ import (
28
28
"k8s.io/kubernetes/test/e2e/framework"
29
29
)
30
30
31
- // verifyCnsVolumeMetadata4GCVol verifies cns volume metadata for a GC volume
32
- // if gcPvc, gcPv or pod are nil we skip verification for them altogether and wont check if they are absent in CNS entry
31
+ // verifyCnsVolumeMetadata4GCVol verifies CNS volume metadata for a GC volume.
32
+ // If gcPvc, gcPv or pod are nil, we skip verification for them altogether and won't check if they are absent in CNS entry.
33
33
func verifyCnsVolumeMetadata4GCVol (volumeID string , svcPVCName string , gcPvc * v1.PersistentVolumeClaim ,
34
34
gcPv * v1.PersistentVolume , pod * v1.Pod ) bool {
35
35
36
+ framework .Logf ("[START] Verifying CNS metadata for volumeID: %s" , volumeID )
37
+
38
+ // Query CNS for volume metadata
36
39
cnsQueryResult , err := e2eVSphere .queryCNSVolumeWithResult (volumeID )
37
40
gomega .Expect (err ).NotTo (gomega .HaveOccurred ())
38
41
if len (cnsQueryResult .Volumes ) == 0 {
39
- framework .Logf ("CNS volume query yielded no results for volume id: %s" , volumeID )
42
+ framework .Logf ("[ERROR] CNS volume query yielded no results for volume id: %s" , volumeID )
40
43
return false
41
44
}
45
+
42
46
cnsVolume := cnsQueryResult .Volumes [0 ]
47
+ framework .Logf ("[INFO] CNS volume found: %s" , spew .Sdump (cnsVolume ))
48
+
49
+ // Initialize verification flags
43
50
podEntryFound := false
44
- verifyPvEntry := false
45
- verifyPvcEntry := false
46
- verifyPodEntry := false
47
- gcPVCVerified := false
48
- gcPVVerified := false
51
+ verifyPvEntry := gcPv != nil
52
+ verifyPvcEntry := gcPvc != nil
53
+ verifyPodEntry := pod != nil
54
+ gcPVCVerified := ! verifyPvcEntry
55
+ gcPVVerified := ! verifyPvEntry
49
56
svcPVCVerified := false
50
57
svcPVVerified := false
58
+
59
+ // Fetch supervisor PVC and PV
51
60
svcPVC := getPVCFromSupervisorCluster (svcPVCName )
52
61
svcPV := getPvFromSupervisorCluster (svcPVCName )
53
- if gcPvc != nil {
54
- verifyPvcEntry = true
55
- } else {
56
- gcPVCVerified = true
57
- }
58
- if gcPv != nil {
59
- verifyPvEntry = true
60
- } else {
61
- gcPVVerified = true
62
- }
63
- if pod != nil {
64
- verifyPodEntry = true
65
- }
66
- framework .Logf ("Found CNS volume with id %v\n " + spew .Sdump (cnsVolume ), volumeID )
67
- gomega .Expect (cnsVolume .Metadata ).NotTo (gomega .BeNil ())
62
+ framework .Logf ("[INFO] Retrieved svcPVC: %v" , spew .Sdump (svcPVC ))
63
+ framework .Logf ("[INFO] Retrieved svcPV: %v" , spew .Sdump (svcPV ))
64
+
65
+ // Iterate over CNS entity metadata
68
66
for _ , entity := range cnsVolume .Metadata .EntityMetadata {
69
- var pvc * v1.PersistentVolumeClaim
70
- var pv * v1.PersistentVolume
71
67
entityMetadata := entity .(* cnstypes.CnsKubernetesEntityMetadata )
72
- if entityMetadata .EntityType == string (cnstypes .CnsKubernetesEntityTypePVC ) {
73
- verifySvcPvc := false
74
- verifySvcPv := false
75
- if entityMetadata .EntityName == svcPVCName {
68
+ framework .Logf ("[DEBUG] Processing entity: Type=%s, Name=%s, Namespace=%s" , entityMetadata .EntityType , entityMetadata .EntityName , entityMetadata .Namespace )
69
+
70
+ switch entityMetadata .EntityType {
71
+ case string (cnstypes .CnsKubernetesEntityTypePVC ):
72
+ var pv * v1.PersistentVolume
73
+ var pvc * v1.PersistentVolumeClaim
74
+ verifySvcPvc := entityMetadata .EntityName == svcPVCName
75
+ verifySvcPv := verifySvcPvc
76
+
77
+ if verifySvcPvc {
76
78
pvc = svcPVC
77
79
pv = svcPV
78
- verifySvcPvc = true
79
- verifySvcPv = true
80
80
} else {
81
81
pvc = gcPvc
82
82
pv = gcPv
83
83
}
84
- if verifyPvcEntry || verifySvcPvc {
84
+
85
+ if (verifyPvcEntry && pvc != nil ) || verifySvcPvc {
85
86
if entityMetadata .EntityName != pvc .Name {
86
- framework .Logf ("PVC name '%v' does not match PVC name in metadata '%v', for volume id %v" ,
87
- pvc .Name , entityMetadata .EntityName , volumeID )
87
+ framework .Logf ("[MISMATCH] PVC name mismatch: expected='%s', actual='%s'" , pvc .Name , entityMetadata .EntityName )
88
88
break
89
89
}
90
- if verifyPvEntry || verifySvcPv {
90
+ if ( verifyPvEntry && pv != nil ) || verifySvcPv {
91
91
if entityMetadata .ReferredEntity == nil {
92
- framework .Logf ("Missing ReferredEntity in PVC entry for volume id %v " , volumeID )
92
+ framework .Logf ("[MISSING] ReferredEntity missing in PVC metadata for volume id %s " , volumeID )
93
93
break
94
94
}
95
95
if entityMetadata .ReferredEntity [0 ].EntityName != pv .Name {
96
- framework .Logf ("PV name '%v' in referred entity does not match PV name '%v', " +
97
- "in PVC metadata for volume id %v" , entityMetadata .ReferredEntity [0 ].EntityName ,
98
- pv .Name , volumeID )
96
+ framework .Logf ("[MISMATCH] PV name mismatch in ReferredEntity: expected='%s', actual='%s'" , pv .Name , entityMetadata .ReferredEntity [0 ].EntityName )
99
97
break
100
98
}
101
99
}
102
- if pvc .Labels == nil {
103
- if entityMetadata .Labels != nil {
104
- framework .Logf ("PVC labels '%v' does not match PVC labels in metadata '%v', for volume id %v" ,
105
- pvc .Labels , entityMetadata .Labels , volumeID )
106
- break
107
- }
108
- } else {
109
- labels := getLabelMap (entityMetadata .Labels )
110
- if ! (reflect .DeepEqual (labels , pvc .Labels )) {
111
- framework .Logf (
112
- "Labels on pvc '%v' are not matching with labels in metadata '%v' for volume id %v" ,
113
- pvc .Labels , entityMetadata .Labels , volumeID )
114
- break
115
- }
100
+ if ! reflect .DeepEqual (getLabelMap (entityMetadata .Labels ), pvc .Labels ) {
101
+ framework .Logf ("[MISMATCH] PVC labels mismatch: expected='%v', actual='%v'" , pvc .Labels , entityMetadata .Labels )
102
+ break
116
103
}
117
104
if entityMetadata .Namespace != pvc .Namespace {
118
- framework .Logf (
119
- "PVC namespace '%v' does not match PVC namespace in pvc metadata '%v', for volume id %v" ,
120
- pvc .Namespace , entityMetadata .Namespace , volumeID )
105
+ framework .Logf ("[MISMATCH] PVC namespace mismatch: expected='%s', actual='%s'" , pvc .Namespace , entityMetadata .Namespace )
121
106
break
122
107
}
123
108
}
@@ -127,110 +112,88 @@ func verifyCnsVolumeMetadata4GCVol(volumeID string, svcPVCName string, gcPvc *v1
127
112
} else {
128
113
gcPVCVerified = true
129
114
}
130
- continue
131
- }
132
- if entityMetadata . EntityType == string ( cnstypes . CnsKubernetesEntityTypePV ) {
133
- verifySvcPv := false
134
- if entityMetadata . EntityName == svcPV . Name {
135
- pvc = svcPVC
115
+
116
+ case string ( cnstypes . CnsKubernetesEntityTypePV ):
117
+ var pv * v1. PersistentVolume
118
+ verifySvcPv := entityMetadata . EntityName == svcPV . Name
119
+
120
+ if verifySvcPv {
136
121
pv = svcPV
137
- verifySvcPv = true
138
122
} else {
139
- pvc = gcPvc
140
123
pv = gcPv
141
124
}
142
- if verifyPvEntry || verifySvcPv {
125
+
126
+ if (verifyPvEntry && pv != nil ) || verifySvcPv {
143
127
if entityMetadata .EntityName != pv .Name {
144
- framework .Logf ("PV name '%v' does not match PV name in metadata '%v', for volume id %v" ,
145
- pv .Name , entityMetadata .EntityName , volumeID )
128
+ framework .Logf ("[MISMATCH] PV name mismatch: expected='%s', actual='%s'" , pv .Name , entityMetadata .EntityName )
146
129
break
147
130
}
148
- if pv .Labels == nil {
149
- if entityMetadata .Labels != nil {
150
- framework .Logf ("PV labels '%v' does not match PV labels in metadata '%v', for volume id %v" ,
151
- pv .Labels , entityMetadata .Labels , volumeID )
152
- break
153
- }
154
- } else {
155
- labels := getLabelMap (entityMetadata .Labels )
156
- if ! (reflect .DeepEqual (labels , pv .Labels )) {
157
- framework .Logf (
158
- "Labels on pv '%v' are not matching with labels in pv metadata '%v' for volume id %v" ,
159
- pv .Labels , entityMetadata .Labels , volumeID )
160
- break
161
- }
131
+ if ! reflect .DeepEqual (getLabelMap (entityMetadata .Labels ), pv .Labels ) {
132
+ framework .Logf ("[MISMATCH] PV labels mismatch: expected='%v', actual='%v'" , pv .Labels , entityMetadata .Labels )
133
+ break
162
134
}
163
135
if ! verifySvcPv {
164
136
if entityMetadata .ReferredEntity == nil {
165
- framework .Logf ("Missing ReferredEntity in SVC PV entry for volume id %v " , volumeID )
137
+ framework .Logf ("[MISSING] ReferredEntity missing in PV metadata for volume id %s " , volumeID )
166
138
break
167
139
}
168
140
if entityMetadata .ReferredEntity [0 ].EntityName != svcPVCName {
169
- framework .Logf ("SVC PVC name '%v' in referred entity does not match SVC PVC name '%v', " +
170
- "in SVC PV metadata for volume id %v" , entityMetadata .ReferredEntity [0 ].EntityName ,
171
- svcPVCName , volumeID )
141
+ framework .Logf ("[MISMATCH] SVC PVC name mismatch in ReferredEntity: expected='%s', actual='%s'" , svcPVCName , entityMetadata .ReferredEntity [0 ].EntityName )
172
142
break
173
143
}
174
144
if entityMetadata .ReferredEntity [0 ].Namespace != svcPVC .Namespace {
175
- framework .Logf ("SVC PVC namespace '%v' does not match SVC PVC namespace in SVC PV referred " +
176
- "entity metadata '%v', for volume id %v" ,
177
- pvc .Namespace , entityMetadata .ReferredEntity [0 ].Namespace , volumeID )
145
+ framework .Logf ("[MISMATCH] SVC PVC namespace mismatch in ReferredEntity: expected='%s', actual='%s'" , svcPVC .Namespace , entityMetadata .ReferredEntity [0 ].Namespace )
178
146
break
179
147
}
180
148
}
181
149
}
150
+
182
151
if verifySvcPv {
183
152
svcPVVerified = true
184
153
} else {
185
154
gcPVVerified = true
186
155
}
187
- continue
188
- }
189
- if entityMetadata .EntityType == string (cnstypes .CnsKubernetesEntityTypePOD ) {
190
- pvc = gcPvc
191
- if verifyPodEntry {
156
+
157
+ case string (cnstypes .CnsKubernetesEntityTypePOD ):
158
+ if verifyPodEntry && pod != nil {
192
159
podEntryFound = true
193
160
if entityMetadata .EntityName != pod .Name {
194
- framework .Logf ("POD name '%v' does not match Pod name in metadata '%v', for volume id %v" ,
195
- pod .Name , entityMetadata .EntityName , volumeID )
161
+ framework .Logf ("[MISMATCH] Pod name mismatch: expected='%s', actual='%s'" , pod .Name , entityMetadata .EntityName )
196
162
podEntryFound = false
197
163
break
198
164
}
199
- if verifyPvcEntry {
165
+ if entityMetadata .Namespace != pod .Namespace {
166
+ framework .Logf ("[MISMATCH] Pod namespace mismatch: expected='%s', actual='%s'" , pod .Namespace , entityMetadata .Namespace )
167
+ podEntryFound = false
168
+ break
169
+ }
170
+ if verifyPvcEntry && gcPvc != nil {
200
171
if entityMetadata .ReferredEntity == nil {
201
- framework .Logf ("Missing ReferredEntity in pod entry for volume id %v " , volumeID )
172
+ framework .Logf ("[MISSING] ReferredEntity missing in Pod metadata for volume id %s " , volumeID )
202
173
podEntryFound = false
203
174
break
204
175
}
205
- if entityMetadata .ReferredEntity [0 ].EntityName != pvc .Name {
206
- framework .Logf ("PVC name '%v' in referred entity does not match PVC name '%v', " +
207
- "in PVC metadata for volume id %v" , entityMetadata .ReferredEntity [0 ].EntityName ,
208
- pvc .Name , volumeID )
176
+ if entityMetadata .ReferredEntity [0 ].EntityName != gcPvc .Name {
177
+ framework .Logf ("[MISMATCH] PVC name mismatch in Pod ReferredEntity: expected='%s', actual='%s'" , gcPvc .Name , entityMetadata .ReferredEntity [0 ].EntityName )
209
178
podEntryFound = false
210
179
break
211
180
}
212
- if entityMetadata .ReferredEntity [0 ].Namespace != pvc .Namespace {
213
- framework .Logf ("PVC namespace '%v' does not match PVC namespace in Pod metadata " +
214
- "referered entity, '%v', for volume id %v" ,
215
- pvc .Namespace , entityMetadata .ReferredEntity [0 ].Namespace , volumeID )
181
+ if entityMetadata .ReferredEntity [0 ].Namespace != gcPvc .Namespace {
182
+ framework .Logf ("[MISMATCH] PVC namespace mismatch in Pod ReferredEntity: expected='%s', actual='%s'" , gcPvc .Namespace , entityMetadata .ReferredEntity [0 ].Namespace )
216
183
podEntryFound = false
217
184
break
218
185
}
219
186
}
220
- if entityMetadata .Namespace != pod .Namespace {
221
- framework .Logf (
222
- "Pod namespace '%v' does not match pod namespace in pvc metadata '%v', for volume id %v" ,
223
- pod .Namespace , entityMetadata .Namespace , volumeID )
224
- podEntryFound = false
225
- break
226
- }
227
187
}
228
188
}
229
189
}
230
- framework .Logf ("gcPVVerified: %v, verifyPvEntry: %v, gcPVCVerified: %v, verifyPvcEntry: %v, " +
231
- "podEntryFound: %v, verifyPodEntry: %v, svcPVCVerified: %v, svcPVVerified: %v " , gcPVVerified , verifyPvEntry ,
232
- gcPVCVerified , verifyPvcEntry , podEntryFound , verifyPodEntry , svcPVCVerified , svcPVVerified )
233
- return gcPVVerified && gcPVCVerified && podEntryFound == verifyPodEntry && svcPVCVerified && svcPVVerified
190
+
191
+ framework .Logf ("[RESULT] Verification flags — gcPVVerified: %v, verifyPvEntry: %v, gcPVCVerified: %v, verifyPvcEntry: %v, podEntryFound: %v, verifyPodEntry: %v, svcPVCVerified: %v, svcPVVerified: %v" ,
192
+ gcPVVerified , verifyPvEntry , gcPVCVerified , verifyPvcEntry , podEntryFound , verifyPodEntry , svcPVCVerified , svcPVVerified )
193
+
194
+ finalResult := gcPVVerified && gcPVCVerified && podEntryFound == verifyPodEntry && svcPVCVerified && svcPVVerified
195
+ framework .Logf ("[END] CNS metadata verification result for volumeID %s: %v" , volumeID , finalResult )
196
+ return finalResult
234
197
}
235
198
236
199
// waitAndVerifyCnsVolumeMetadata4GCVol verifies cns volume metadata for a GC volume with wait
0 commit comments