in pkg/cloudprovider/vsphere/zones.go [164:232]
func (z *zones) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) {
klog.V(4).Info("zones.GetZoneByProviderID() called with ", providerID)
zone := cloudprovider.Zone{}
if len(z.region) == 0 || len(z.zone) == 0 {
return zone, nil
}
uid := GetUUIDFromProviderID(providerID)
node, ok := z.nodeManager.nodeUUIDMap[uid]
if !ok {
klog.V(2).Info("zones.GetZoneByProviderID() NOT FOUND with ", uid)
return zone, ErrVMNotFound
}
klog.V(4).Infof("Getting zone/region for VM %s", node.NodeName)
vmHost, err := node.vm.HostSystem(ctx)
if err != nil {
klog.Errorf("Failed to get host system for VM: %q. err: %+v", node.vm.InventoryPath, err)
return zone, err
}
vmRP, err := node.vm.ResourcePool(ctx)
if err != nil {
klog.Warningf("Failed to get resource pool for VM: %q. err: %+v", node.vm.InventoryPath, err)
vmRP = nil
}
var oHost mo.HostSystem
err = vmHost.Properties(ctx, vmHost.Reference(), []string{"summary"}, &oHost)
if err != nil {
klog.Errorf("Failed to get host system properties. err: %+v", err)
return zone, err
}
klog.V(4).Infof("Host owning VM is %s", oHost.Summary.Config.Name)
// Look down the compute resources
zoneResult, err := z.nodeManager.connectionManager.LookupZoneByMoref(
ctx, node.tenantRef, vmHost.Reference(), z.zone, z.region)
if err == nil {
zone.FailureDomain = zoneResult[cm.ZoneLabel]
zone.Region = zoneResult[cm.RegionLabel]
return zone, nil
}
// Look down the resource pools
if vmRP != nil {
zoneResult, err := z.nodeManager.connectionManager.LookupZoneByMoref(
ctx, node.tenantRef, vmRP.Reference(), z.zone, z.region)
if err == nil {
zone.FailureDomain = zoneResult[cm.ZoneLabel]
zone.Region = zoneResult[cm.RegionLabel]
return zone, nil
}
}
// Look down the folders path
zoneResult, err = z.nodeManager.connectionManager.LookupZoneByMoref(
ctx, node.tenantRef, node.vm.Reference(), z.zone, z.region)
if err != nil {
klog.Errorf("Failed to get host system properties. err: %+v", err)
return zone, err
}
zone.FailureDomain = zoneResult[cm.ZoneLabel]
zone.Region = zoneResult[cm.RegionLabel]
return zone, nil
}