code: func (cs *CSCloud) getLoadBalancer(service *v1.Service) (*loadBalancer, error) {
  	lb := &loadBalancer{
  		CloudStackClient: cs.client,
  		name:             cs.GetLoadBalancerName(context.TODO(), "", service),
  		projectID:        cs.projectID,
  		rules:            make(map[string]*cloudstack.LoadBalancerRule),
  	}
  
  	p := cs.client.LoadBalancer.NewListLoadBalancerRulesParams()
  	p.SetKeyword(lb.name)
  	p.SetListall(true)
  
  	if cs.projectID != "" {
  		p.SetProjectid(cs.projectID)
  	}
  
  	l, err := cs.client.LoadBalancer.ListLoadBalancerRules(p)
  	if err != nil {
  		return nil, fmt.Errorf("error retrieving load balancer rules: %v", err)
  	}
  
  	for _, lbRule := range l.LoadBalancerRules {
  		lb.rules[lbRule.Name] = lbRule
  
  		if lb.ipAddr != "" && lb.ipAddr != lbRule.Publicip {
  			klog.Warningf("Load balancer for service %v/%v has rules associated with different IP's: %v, %v", service.Namespace, service.Name, lb.ipAddr, lbRule.Publicip)
  		}
  
  		lb.ipAddr = lbRule.Publicip
  		lb.ipAddrID = lbRule.Publicipid
  	}
  
  	klog.V(4).Infof("Load balancer %v contains %d rule(s)", lb.name, len(lb.rules))
  
  	return lb, nil
  }
docs: // getLoadBalancer retrieves the IP address and ID and all the existing rules it can find.