'Create a new load balancer instance
:param name: Name of the new load balancer (required)
:type  name: ``str``
:param port: An integer in the range of 1-65535. If not supplied,
it will be taken to mean \'Any Port\'
:type  port: ``int``
:param protocol: Loadbalancer protocol, defaults to http.
:type  protocol: ``str``
:param members: list of Members to attach to balancer (optional)
:type  members: ``list`` of :class:`Member`
:param algorithm: Load balancing algorithm, defaults to ROUND_ROBIN.
:type algorithm: :class:`.Algorithm`
:param ex_listener_ip_address: Must be a valid IPv4 in dot-decimal
notation (x.x.x.x).
:type ex_listener_ip_address: ``str``
:rtype: :class:`LoadBalancer`'

def create_balancer(self, name, port=None, protocol=None, algorithm=None, members=None, ex_listener_ip_address=None):

    network_domain_id = self.network_domain_id
    if (protocol is None):
        protocol = 'http'
    if (algorithm is None):
        algorithm = Algorithm.ROUND_ROBIN
    pool = self.ex_create_pool(network_domain_id=network_domain_id, name=name, ex_description=None, balancer_method=self._ALGORITHM_TO_VALUE_MAP[algorithm])
    if (members is not None):
        for member in members:
            node = self.ex_create_node(network_domain_id=network_domain_id, name=member.ip, ip=member.ip, ex_description=None)
            self.ex_create_pool_member(pool=pool, node=node, port=port)
    listener = self.ex_create_virtual_listener(network_domain_id=network_domain_id, name=name, ex_description=name, port=port, pool=pool, listener_ip_address=ex_listener_ip_address)
    return LoadBalancer(id=listener.id, name=listener.name, state=State.RUNNING, ip=listener.ip, port=port, driver=self, extra={'pool_id': pool.id, 'network_domain_id': network_domain_id, 'listener_ip_address': ex_listener_ip_address})
