code: func (lb *loadBalancer) associatePublicIPAddress() error {
  	klog.V(4).Infof("Allocate new IP for load balancer: %v", lb.name)
  	// If a network belongs to a VPC, the IP address needs to be associated with
  	// the VPC instead of with the network.
  	network, count, err := lb.Network.GetNetworkByID(lb.networkID, cloudstack.WithProject(lb.projectID))
  	if err != nil {
  		if count == 0 {
  			return fmt.Errorf("could not find network %v", lb.networkID)
  		}
  		return fmt.Errorf("error retrieving network: %v", err)
  	}
  
  	p := lb.Address.NewAssociateIpAddressParams()
  
  	if network.Vpcid != "" {
  		p.SetVpcid(network.Vpcid)
  	} else {
  		p.SetNetworkid(lb.networkID)
  	}
  
  	if lb.projectID != "" {
  		p.SetProjectid(lb.projectID)
  	}
  
  	// Associate a new IP address
  	r, err := lb.Address.AssociateIpAddress(p)
  	if err != nil {
  		return fmt.Errorf("error associating new IP address: %v", err)
  	}
  
  	lb.ipAddr = r.Ipaddress
  	lb.ipAddrID = r.Id
  
  	return nil
  }
docs: // associatePublicIPAddress associates a new IP and sets the address and it's ID.