func()

in pkg/common/connectionmanager/list.go [31:90]


func (cm *ConnectionManager) ListAllVCandDCPairs(ctx context.Context) ([]*ListDiscoveryInfo, error) {
	klog.V(4).Infof("ListAllVCandDCPairs called")

	listOfVCAndDCPairs := make([]*ListDiscoveryInfo, 0)

	for _, vsi := range cm.VsphereInstanceMap {
		var datacenterObjs []*vclib.Datacenter

		var err error
		for i := 0; i < NumConnectionAttempts; i++ {
			err = cm.Connect(ctx, vsi)
			if err == nil {
				break
			}
			time.Sleep(time.Duration(RetryAttemptDelaySecs) * time.Second)
		}

		if err != nil {
			klog.Error("Connect error vc:", err)
			continue
		}

		if vsi.Cfg.Datacenters == "" {
			datacenterObjs, err = vclib.GetAllDatacenter(ctx, vsi.Conn)
			if err != nil {
				klog.Error("GetAllDatacenter error dc:", err)
				continue
			}
		} else {
			datacenters := strings.Split(vsi.Cfg.Datacenters, ",")
			for _, dc := range datacenters {
				dc = strings.TrimSpace(dc)
				if dc == "" {
					continue
				}
				datacenterObj, err := vclib.GetDatacenter(ctx, vsi.Conn, dc)
				if err != nil {
					klog.Error("GetDatacenter error dc:", err)
					continue
				}
				datacenterObjs = append(datacenterObjs, datacenterObj)
			}
		}

		for _, datacenterObj := range datacenterObjs {
			listOfVCAndDCPairs = append(listOfVCAndDCPairs, &ListDiscoveryInfo{
				TenantRef:  vsi.Cfg.TenantRef,
				VcServer:   vsi.Cfg.VCenterIP,
				DataCenter: datacenterObj,
			})
		}
	}

	sort.Slice(listOfVCAndDCPairs, func(i, j int) bool {
		return strings.Compare(listOfVCAndDCPairs[i].VcServer, listOfVCAndDCPairs[j].VcServer) > 0 &&
			strings.Compare(listOfVCAndDCPairs[i].DataCenter.Name(), listOfVCAndDCPairs[j].DataCenter.Name()) > 0
	})

	return listOfVCAndDCPairs, nil
}