libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <>
Subject [jira] [Commented] (LIBCLOUD-879) GCE Load balancer suppose that all VM have public ip
Date Wed, 23 Nov 2016 01:52:59 GMT


ASF GitHub Bot commented on LIBCLOUD-879:

GitHub user charly37 opened a pull request:

    [LIBCLOUD-879] Add support of node without public IP in LB

    ## Add support of Node without public IP in GCP load balancer
    ### Description
    Link to jira ticket 879
    I had a condition to only try to grab the publicIP of a node if it had one since publicIP
is not mandatory.
    ### Status
    This PR is ready to be review. I run the test (tox) before and after the change and no
    ### Checklist (tick everything that applies)
    - [X] [Code linting] I tried to followed the guidline
    - [X] [Documentation] No change require
    - [X] [Tests] No impact on existing test (but no time to had more)
    - [X] [ICLA] Minor change so I skip it

You can merge this pull request into a Git repository by running:

    $ git pull 879_PublicIpOpt

Alternatively you can review and apply these changes as the patch at:

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #952
commit 38ae70157de7176e486b9c9965e9d9f385de3221
Author: Charles Walker <>
Date:   2016-11-23T01:34:05Z

    [LIBCLOUD-879] Add support of node without public IP in LB


> GCE Load balancer suppose that all VM have public ip
> ----------------------------------------------------
>                 Key: LIBCLOUD-879
>                 URL:
>             Project: Libcloud
>          Issue Type: Bug
>          Components: LoadBalancer
>         Environment: GCE MASTER
>            Reporter: charles walker
>            Priority: Minor
>   Original Estimate: 1h
>  Remaining Estimate: 1h
> When calling "list_members()" on a GCe load balancer libcloud object I end up with the
following stack :
> {noformat}
> Retrieve 2 Lbs. Here is the list : [<LoadBalancer: id=68XXXXXXXX707, name=europe-lb-forwarding-rule,
state=None, ip=10XXXXXXXX.77, port=30012-30012>, <LoadBalancer: id=87688XXXXXXXX64,
name=load-balancer-prd-comp-forwarding-rule-2, state=None, ip=10XXXXXXXX93, port=30001-30001>]
> --Printing the node obj for DBG : <Node: uuid=9001a5d9d425dc0e5dd1db5352296b08920bde21,
name=tec-XXXXXXXX-infra-2ktm, state=RUNNING, public_ips=[], private_ips=['10.XXXXXXXX'], provider=Google
Compute Engine ...>
> Traceback (most recent call last):
>   File "", line 43, in <module>
>     print ("Members: " +str(aLbs[0].list_members()))
>   File "/home/cloud-user/LbTest/src/apache-libcloud/libcloud/loadbalancer/", line
110, in list_members
>     return self.driver.balancer_list_members(balancer=self)
>   File "/home/cloud-user/LbTest/src/apache-libcloud/libcloud/loadbalancer/drivers/",
line 274, in balancer_list_members
>     balancer.extra['targetpool'].nodes]
>   File "/home/cloud-user/LbTest/src/apache-libcloud/libcloud/loadbalancer/drivers/",
line 342, in _node_to_member
>     member_ip = node.public_ips[0]
> IndexError: list index out of range
> {noformat}
> After some investigations it appears to comes from the method "def _node_to_member(self,
node, balancer):" in loadbalancer/drivers/ Mode precisely this piece of the code :
> {|borderStyle=solid}
> if hasattr(node, 'name'):
> 	member_id =
> 	member_ip = node.public_ips[0]
> else:
> 	member_id = node
> 	member_ip = None
> {code}
> which imply that all VM in the load balancer will have public IP. This is not necessarly
the case and thus when it happen the process crash (as you can see in the previous stack where
i added some debug log in my libcloud version to print the node where the error occurs).
> I would had suggest to use private ip instead of public but I do not want to impact the
existing user of libcloud so I was thinking of a simple fix :
> {|borderStyle=solid}
> if hasattr(node, 'name'):
>     member_id =
> else:
>     member_id = node
> if (len(node.public_ips) > 0):
>     member_ip = node.public_ips[0]
> else:
>     member_ip = None
> {code}

This message was sent by Atlassian JIRA

View raw message