libcloud/loadbalancer/drivers/dimensiondata.py [189:388]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def list_balancers(self, ex_network_domain_id=None):
        """
        List all loadbalancers inside a geography or in given network.

        In Dimension Data terminology these are known as virtual listeners

        :param ex_network_domain_id: UUID of Network Domain
               if not None returns only balancers in the given network
               if None then returns all pools for the organization
        :type  ex_network_domain_id: ``str``

        :rtype: ``list`` of :class:`LoadBalancer`
        """
        params = None
        if ex_network_domain_id is not None:
            params = {"networkDomainId": ex_network_domain_id}

        return self._to_balancers(
            self.connection.request_with_orgId_api_2(
                "networkDomainVip/virtualListener", params=params
            ).object
        )

    def get_balancer(self, balancer_id):
        """
        Return a :class:`LoadBalancer` object.

        :param balancer_id: id of a load balancer you want to fetch
        :type  balancer_id: ``str``

        :rtype: :class:`LoadBalancer`
        """

        bal = self.connection.request_with_orgId_api_2(
            "networkDomainVip/virtualListener/%s" % balancer_id
        ).object
        return self._to_balancer(bal)

    def list_protocols(self):
        """
        Return a list of supported protocols.

        Since all protocols are support by Dimension Data, this is a list
        of common protocols.

        :rtype: ``list`` of ``str``
        """
        return ["http", "https", "tcp", "udp", "ftp", "smtp"]

    def balancer_list_members(self, balancer):
        """
        Return list of members attached to balancer.

        In Dimension Data terminology these are the members of the pools
        within a virtual listener.

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :rtype: ``list`` of :class:`Member`
        """
        pool_members = self.ex_get_pool_members(balancer.extra["pool_id"])
        members = []
        for pool_member in pool_members:
            members.append(
                Member(
                    id=pool_member.id,
                    ip=pool_member.ip,
                    port=pool_member.port,
                    balancer=balancer,
                    extra=None,
                )
            )
        return members

    def balancer_attach_member(self, balancer, member):
        """
        Attach a member to balancer

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :param member: Member to join to the balancer
        :type member: :class:`Member`

        :return: Member after joining the balancer.
        :rtype: :class:`Member`
        """
        node = self.ex_create_node(
            network_domain_id=balancer.extra["network_domain_id"],
            name="Member." + member.ip,
            ip=member.ip,
            ex_description="",
        )
        if node is False:
            return False
        pool = self.ex_get_pool(balancer.extra["pool_id"])
        pool_member = self.ex_create_pool_member(pool=pool, node=node, port=member.port)
        member.id = pool_member.id
        return member

    def balancer_detach_member(self, balancer, member):
        """
        Detach member from balancer

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :param member: Member which should be used
        :type member: :class:`Member`

        :return: ``True`` if member detach was successful, otherwise ``False``.
        :rtype: ``bool``
        """
        create_pool_m = ET.Element("removePoolMember", {"xmlns": TYPES_URN, "id": member.id})

        result = self.connection.request_with_orgId_api_2(
            "networkDomainVip/removePoolMember",
            method="POST",
            data=ET.tostring(create_pool_m),
        ).object
        response_code = findtext(result, "responseCode", TYPES_URN)
        return response_code in ["IN_PROGRESS", "OK"]

    def destroy_balancer(self, balancer):
        """
        Destroy a load balancer (virtual listener)

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :return: ``True`` if the destroy was successful, otherwise ``False``.
        :rtype: ``bool``
        """
        delete_listener = ET.Element(
            "deleteVirtualListener", {"xmlns": TYPES_URN, "id": balancer.id}
        )

        result = self.connection.request_with_orgId_api_2(
            "networkDomainVip/deleteVirtualListener",
            method="POST",
            data=ET.tostring(delete_listener),
        ).object
        response_code = findtext(result, "responseCode", TYPES_URN)
        return response_code in ["IN_PROGRESS", "OK"]

    def ex_set_current_network_domain(self, network_domain_id):
        """
        Set the network domain (part of the network) of the driver

        :param network_domain_id: ID of the pool (required)
        :type  network_domain_id: ``str``
        """
        self.network_domain_id = network_domain_id

    def ex_get_current_network_domain(self):
        """
        Get the current network domain ID of the driver.

        :return: ID of the network domain
        :rtype: ``str``
        """
        return self.network_domain_id

    def ex_create_pool_member(self, pool, node, port=None):
        """
        Create a new member in an existing pool from an existing node

        :param pool: Instance of ``DimensionDataPool`` (required)
        :type  pool: ``DimensionDataPool``

        :param node: Instance of ``DimensionDataVIPNode`` (required)
        :type  node: ``DimensionDataVIPNode``

        :param port: Port the the service will listen on
        :type  port: ``str``

        :return: The node member, instance of ``DimensionDataPoolMember``
        :rtype: ``DimensionDataPoolMember``
        """
        create_pool_m = ET.Element("addPoolMember", {"xmlns": TYPES_URN})
        ET.SubElement(create_pool_m, "poolId").text = pool.id
        ET.SubElement(create_pool_m, "nodeId").text = node.id
        if port is not None:
            ET.SubElement(create_pool_m, "port").text = str(port)
        ET.SubElement(create_pool_m, "status").text = "ENABLED"

        response = self.connection.request_with_orgId_api_2(
            "networkDomainVip/addPoolMember",
            method="POST",
            data=ET.tostring(create_pool_m),
        ).object

        member_id = None
        node_name = None
        for info in findall(response, "info", TYPES_URN):
            if info.get("name") == "poolMemberId":
                member_id = info.get("value")
            if info.get("name") == "nodeName":
                node_name = info.get("value")
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



libcloud/loadbalancer/drivers/nttcis.py [243:441]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def list_balancers(self, ex_network_domain_id=None):
        """
        List all loadbalancers inside a geography or in given network.

        In NTTC-CIS terminology these are known as virtual listeners

        :param ex_network_domain_id: UUID of Network Domain
               if not None returns only balancers in the given network
               if None then returns all pools for the organization
        :type  ex_network_domain_id: ``str``

        :rtype: ``list`` of :class:`LoadBalancer`
        """
        params = None
        if ex_network_domain_id is not None:
            params = {"networkDomainId": ex_network_domain_id}

        return self._to_balancers(
            self.connection.request_with_orgId_api_2(
                "networkDomainVip/virtualListener", params=params
            ).object
        )

    def get_balancer(self, balancer_id):
        """
        Return a :class:`LoadBalancer` object.

        :param balancer_id: id of a load balancer you want to fetch
        :type  balancer_id: ``str``

        :rtype: :class:`LoadBalancer`
        """

        bal = self.connection.request_with_orgId_api_2(
            "networkDomainVip/virtualListener/%s" % balancer_id
        ).object
        return self._to_balancer(bal)

    def list_protocols(self):
        """
        Return a list of supported protocols.

        Since all protocols are support by NTTC-CIS, this is a list
        of common protocols.

        :rtype: ``list`` of ``str``
        """
        return ["http", "https", "tcp", "udp", "ftp", "smtp"]

    def balancer_list_members(self, balancer):
        """
        Return list of members attached to balancer.

        In NTTC-CIS terminology these are the members of the pools
        within a virtual listener.

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :rtype: ``list`` of :class:`Member`
        """
        pool_members = self.ex_get_pool_members(balancer.extra["pool_id"])
        members = []
        for pool_member in pool_members:
            members.append(
                Member(
                    id=pool_member.id,
                    ip=pool_member.ip,
                    port=pool_member.port,
                    balancer=balancer,
                    extra=None,
                )
            )
        return members

    def balancer_attach_member(self, balancer, member):
        """
        Attach a member to balancer

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :param member: Member to join to the balancer
        :type member: :class:`Member`

        :return: Member after joining the balancer.
        :rtype: :class:`Member`
        """
        node = self.ex_create_node(
            network_domain_id=balancer.extra["network_domain_id"],
            name="Member." + member.ip,
            ip=member.ip,
            ex_description="",
        )
        if node is False:
            return False
        pool = self.ex_get_pool(balancer.extra["pool_id"])
        pool_member = self.ex_create_pool_member(pool=pool, node=node, port=member.port)
        member.id = pool_member.id
        return member

    def balancer_detach_member(self, balancer, member):
        """
        Detach member from balancer

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :param member: Member which should be used
        :type member: :class:`Member`

        :return: ``True`` if member detach was successful, otherwise ``False``.
        :rtype: ``bool``
        """
        create_pool_m = ET.Element("removePoolMember", {"xmlns": TYPES_URN, "id": member.id})

        result = self.connection.request_with_orgId_api_2(
            "networkDomainVip/removePoolMember",
            method="POST",
            data=ET.tostring(create_pool_m),
        ).object
        response_code = findtext(result, "responseCode", TYPES_URN)
        return response_code in ["IN_PROGRESS", "OK"]

    def destroy_balancer(self, balancer):
        """
        Destroy a load balancer (virtual listener)

        :param balancer: LoadBalancer which should be used
        :type  balancer: :class:`LoadBalancer`

        :return: ``True`` if the destroy was successful, otherwise ``False``.
        :rtype: ``bool``
        """
        delete_listener = ET.Element(
            "deleteVirtualListener", {"xmlns": TYPES_URN, "id": balancer.id}
        )

        result = self.connection.request_with_orgId_api_2(
            "networkDomainVip/deleteVirtualListener",
            method="POST",
            data=ET.tostring(delete_listener),
        ).object
        response_code = findtext(result, "responseCode", TYPES_URN)
        return response_code in ["IN_PROGRESS", "OK"]

    def ex_set_current_network_domain(self, network_domain_id):
        """
        Set the network domain (part of the network) of the driver

        :param network_domain_id: ID of the pool (required)
        :type  network_domain_id: ``str``
        """
        self.network_domain_id = network_domain_id

    def ex_get_current_network_domain(self):
        """
        Get the current network domain ID of the driver.

        :return: ID of the network domain
        :rtype: ``str``
        """
        return self.network_domain_id

    def ex_create_pool_member(self, pool, node, port=None):
        """
        Create a new member in an existing pool from an existing node

        :param pool: Instance of ``NttCisPool`` (required)
        :type  pool: ``NttCisPool``

        :param node: Instance of ``NttCisVIPNode`` (required)
        :type  node: ``NttCisVIPNode``

        :param port: Port the the service will listen on
        :type  port: ``str``

        :return: The node member, instance of ``NttCisPoolMember``
        :rtype: ``NttCisPoolMember``
        """
        create_pool_m = ET.Element("addPoolMember", {"xmlns": TYPES_URN})
        ET.SubElement(create_pool_m, "poolId").text = pool.id
        ET.SubElement(create_pool_m, "nodeId").text = node.id
        if port is not None:
            ET.SubElement(create_pool_m, "port").text = str(port)
        ET.SubElement(create_pool_m, "status").text = "ENABLED"
        response = self.connection.request_with_orgId_api_2(
            "networkDomainVip/addPoolMember",
            method="POST",
            data=ET.tostring(create_pool_m),
        ).object

        member_id = None
        node_name = None
        for info in findall(response, "info", TYPES_URN):
            if info.get("name") == "poolMemberId":
                member_id = info.get("value")
            if info.get("name") == "nodeName":
                node_name = info.get("value")
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



