@@ -103,12 +103,18 @@ func (z *zones) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeNam
103
103
klog .V (2 ).Info ("zones.GetZoneByNodeName() NOT FOUND with " , string (nodeName ))
104
104
return zone , ErrVMNotFound
105
105
}
106
+ klog .V (4 ).Infof ("Getting zone/region for VM %s" , node .NodeName )
106
107
107
108
vmHost , err := node .vm .HostSystem (ctx )
108
109
if err != nil {
109
110
klog .Errorf ("Failed to get host system for VM: %q. err: %+v" , node .vm .InventoryPath , err )
110
111
return zone , err
111
112
}
113
+ vmRP , err := node .vm .ResourcePool (ctx )
114
+ if err != nil {
115
+ klog .Warningf ("Failed to get resource pool for VM: %q. err: %+v" , node .vm .InventoryPath , err )
116
+ vmRP = nil
117
+ }
112
118
113
119
var oHost mo.HostSystem
114
120
err = vmHost .Properties (ctx , vmHost .Reference (), []string {"summary" }, & oHost )
@@ -118,8 +124,29 @@ func (z *zones) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeNam
118
124
}
119
125
klog .V (4 ).Infof ("Host owning VM is %s" , oHost .Summary .Config .Name )
120
126
127
+ // Look down the compute resources
121
128
zoneResult , err := z .nodeManager .connectionManager .LookupZoneByMoref (
122
129
ctx , node .tenantRef , vmHost .Reference (), z .zone , z .region )
130
+ if err == nil {
131
+ zone .FailureDomain = zoneResult [cm .ZoneLabel ]
132
+ zone .Region = zoneResult [cm .RegionLabel ]
133
+ return zone , nil
134
+ }
135
+
136
+ // Look down the resource pools
137
+ if vmRP != nil {
138
+ zoneResult , err := z .nodeManager .connectionManager .LookupZoneByMoref (
139
+ ctx , node .tenantRef , vmRP .Reference (), z .zone , z .region )
140
+ if err == nil {
141
+ zone .FailureDomain = zoneResult [cm .ZoneLabel ]
142
+ zone .Region = zoneResult [cm .RegionLabel ]
143
+ return zone , nil
144
+ }
145
+ }
146
+
147
+ // Look down the folders path
148
+ zoneResult , err = z .nodeManager .connectionManager .LookupZoneByMoref (
149
+ ctx , node .tenantRef , node .vm .Reference (), z .zone , z .region )
123
150
if err != nil {
124
151
klog .Errorf ("Failed to get host system properties. err: %+v" , err )
125
152
return zone , err
@@ -147,12 +174,18 @@ func (z *zones) GetZoneByProviderID(ctx context.Context, providerID string) (clo
147
174
klog .V (2 ).Info ("zones.GetZoneByProviderID() NOT FOUND with " , uid )
148
175
return zone , ErrVMNotFound
149
176
}
177
+ klog .V (4 ).Infof ("Getting zone/region for VM %s" , node .NodeName )
150
178
151
179
vmHost , err := node .vm .HostSystem (ctx )
152
180
if err != nil {
153
181
klog .Errorf ("Failed to get host system for VM: %q. err: %+v" , node .vm .InventoryPath , err )
154
182
return zone , err
155
183
}
184
+ vmRP , err := node .vm .ResourcePool (ctx )
185
+ if err != nil {
186
+ klog .Warningf ("Failed to get resource pool for VM: %q. err: %+v" , node .vm .InventoryPath , err )
187
+ vmRP = nil
188
+ }
156
189
157
190
var oHost mo.HostSystem
158
191
err = vmHost .Properties (ctx , vmHost .Reference (), []string {"summary" }, & oHost )
@@ -162,8 +195,29 @@ func (z *zones) GetZoneByProviderID(ctx context.Context, providerID string) (clo
162
195
}
163
196
klog .V (4 ).Infof ("Host owning VM is %s" , oHost .Summary .Config .Name )
164
197
198
+ // Look down the compute resources
165
199
zoneResult , err := z .nodeManager .connectionManager .LookupZoneByMoref (
166
200
ctx , node .tenantRef , vmHost .Reference (), z .zone , z .region )
201
+ if err == nil {
202
+ zone .FailureDomain = zoneResult [cm .ZoneLabel ]
203
+ zone .Region = zoneResult [cm .RegionLabel ]
204
+ return zone , nil
205
+ }
206
+
207
+ // Look down the resource pools
208
+ if vmRP != nil {
209
+ zoneResult , err := z .nodeManager .connectionManager .LookupZoneByMoref (
210
+ ctx , node .tenantRef , vmRP .Reference (), z .zone , z .region )
211
+ if err == nil {
212
+ zone .FailureDomain = zoneResult [cm .ZoneLabel ]
213
+ zone .Region = zoneResult [cm .RegionLabel ]
214
+ return zone , nil
215
+ }
216
+ }
217
+
218
+ // Look down the folders path
219
+ zoneResult , err = z .nodeManager .connectionManager .LookupZoneByMoref (
220
+ ctx , node .tenantRef , node .vm .Reference (), z .zone , z .region )
167
221
if err != nil {
168
222
klog .Errorf ("Failed to get host system properties. err: %+v" , err )
169
223
return zone , err
0 commit comments