func()

in pkg/cloudprovider/vsphere/zones.go [94:161]


func (z *zones) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeName) (cloudprovider.Zone, error) {
	klog.V(4).Info("zones.GetZoneByNodeName() called with ", string(nodeName))

	zone := cloudprovider.Zone{}

	if len(z.region) == 0 || len(z.zone) == 0 {
		return zone, nil
	}

	node, ok := z.nodeManager.nodeNameMap[string(nodeName)]
	if !ok {
		klog.V(2).Info("zones.GetZoneByNodeName() NOT FOUND with ", string(nodeName))
		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
}