Skip to content

Commit 857c124

Browse files
authored
Merge pull request #362 from dvonthenen/checkancestors
Add support for Resource Pool and Folder traversal for Zones/Regions
2 parents 21021a7 + 7b39b3e commit 857c124

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

pkg/cloudprovider/vsphere/zones.go

+54
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,18 @@ func (z *zones) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeNam
103103
klog.V(2).Info("zones.GetZoneByNodeName() NOT FOUND with ", string(nodeName))
104104
return zone, ErrVMNotFound
105105
}
106+
klog.V(4).Infof("Getting zone/region for VM %s", node.NodeName)
106107

107108
vmHost, err := node.vm.HostSystem(ctx)
108109
if err != nil {
109110
klog.Errorf("Failed to get host system for VM: %q. err: %+v", node.vm.InventoryPath, err)
110111
return zone, err
111112
}
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+
}
112118

113119
var oHost mo.HostSystem
114120
err = vmHost.Properties(ctx, vmHost.Reference(), []string{"summary"}, &oHost)
@@ -118,8 +124,29 @@ func (z *zones) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeNam
118124
}
119125
klog.V(4).Infof("Host owning VM is %s", oHost.Summary.Config.Name)
120126

127+
// Look down the compute resources
121128
zoneResult, err := z.nodeManager.connectionManager.LookupZoneByMoref(
122129
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)
123150
if err != nil {
124151
klog.Errorf("Failed to get host system properties. err: %+v", err)
125152
return zone, err
@@ -147,12 +174,18 @@ func (z *zones) GetZoneByProviderID(ctx context.Context, providerID string) (clo
147174
klog.V(2).Info("zones.GetZoneByProviderID() NOT FOUND with ", uid)
148175
return zone, ErrVMNotFound
149176
}
177+
klog.V(4).Infof("Getting zone/region for VM %s", node.NodeName)
150178

151179
vmHost, err := node.vm.HostSystem(ctx)
152180
if err != nil {
153181
klog.Errorf("Failed to get host system for VM: %q. err: %+v", node.vm.InventoryPath, err)
154182
return zone, err
155183
}
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+
}
156189

157190
var oHost mo.HostSystem
158191
err = vmHost.Properties(ctx, vmHost.Reference(), []string{"summary"}, &oHost)
@@ -162,8 +195,29 @@ func (z *zones) GetZoneByProviderID(ctx context.Context, providerID string) (clo
162195
}
163196
klog.V(4).Infof("Host owning VM is %s", oHost.Summary.Config.Name)
164197

198+
// Look down the compute resources
165199
zoneResult, err := z.nodeManager.connectionManager.LookupZoneByMoref(
166200
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)
167221
if err != nil {
168222
klog.Errorf("Failed to get host system properties. err: %+v", err)
169223
return zone, err

pkg/common/connectionmanager/zones.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ func (cm *ConnectionManager) LookupZoneByMoref(ctx context.Context, tenantRef st
345345
tags, err := client.ListAttachedTags(ctx, obj)
346346
if err != nil {
347347
klog.Errorf("Cannot list attached tags. Err: %v", err)
348-
return err
348+
continue
349349
}
350350
for _, value := range tags {
351351
tag, err := client.GetTag(ctx, value)

0 commit comments

Comments
 (0)