func()

in pkg/cloudprovider/vsphere/loadbalancer/state.go [64:128]


func (s *state) Process(class *loadBalancerClass) error {
	var err error
	s.ipAddressAlloc, s.ipAddress, err = s.access.FindExternalIPAddressForObject(class.ipPool.Identifier, s.clusterName, s.objectName)
	if err != nil {
		return err
	}
	s.servers, err = s.access.FindVirtualServers(s.clusterName, s.objectName)
	if err != nil {
		return err
	}
	s.pools, err = s.access.FindPools(s.clusterName, s.objectName)
	if err != nil {
		return err
	}
	s.tcpMonitors, err = s.access.FindTCPMonitorProfiles(s.clusterName, s.objectName)
	if err != nil {
		return err
	}
	if len(s.servers) > 0 {
		className := getTag(s.servers[0].Tags, ScopeLBClass)
		ipPoolID := getTag(s.servers[0].Tags, ScopeIPPoolID)
		if class.className != className || class.ipPool.Identifier != ipPoolID {
			classConfig := &config.LoadBalancerClassConfig{
				IPPoolID: ipPoolID,
			}
			class, err = newLBClass(className, classConfig, class, nil)
			if err != nil {
				return err
			}
		}
	}
	s.class = class

	for _, servicePort := range s.service.Spec.Ports {
		mapping := NewMapping(servicePort)

		monitor, err := s.getTCPMonitor(mapping)
		if err != nil {
			return err
		}
		pool, err := s.getPool(mapping, monitor)
		if err != nil {
			return err
		}
		_, err = s.getVirtualServer(mapping, pool.Path)
		if err != nil {
			return err
		}
	}
	validPoolPaths, err := s.deleteOrphanVirtualServers()
	if err != nil {
		return err
	}
	s.CtxInfof("validPoolPaths: %v", validPoolPaths.List())
	validTCPMonitorPaths, err := s.deleteOrphanPools(validPoolPaths)
	if err != nil {
		return err
	}
	s.CtxInfof("validTCPMonitorPaths: %v", validTCPMonitorPaths.List())
	err = s.deleteOrphanTCPMonitors(validTCPMonitorPaths)
	if err != nil {
		return err
	}
	return nil
}