[ 
https://issues.apache.org/jira/browse/LIBCLOUD-879?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15688581#comment-15688581
 ] 

ASF GitHub Bot commented on LIBCLOUD-879:
-----------------------------------------

GitHub user charly37 opened a pull request:

    https://github.com/apache/libcloud/pull/952

    [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 
    https://issues.apache.org/jira/browse/LIBCLOUD-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 impact.
    
    ### 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 https://github.com/charly37/libcloud 879_PublicIpOpt

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

    https://github.com/apache/libcloud/pull/952.patch

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 <[email protected]>
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: https://issues.apache.org/jira/browse/LIBCLOUD-879
>             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 "LbTestPy.py", line 43, in <module>
>     print ("Members: " +str(aLbs[0].list_members()))
>   File 
> "/home/cloud-user/LbTest/src/apache-libcloud/libcloud/loadbalancer/base.py", 
> line 110, in list_members
>     return self.driver.balancer_list_members(balancer=self)
>   File 
> "/home/cloud-user/LbTest/src/apache-libcloud/libcloud/loadbalancer/drivers/gce.py",
>  line 274, in balancer_list_members
>     balancer.extra['targetpool'].nodes]
>   File 
> "/home/cloud-user/LbTest/src/apache-libcloud/libcloud/loadbalancer/drivers/gce.py",
>  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/gce.py. Mode 
> precisely this piece of the code :
> {code:title=code1.py|borderStyle=solid}
> if hasattr(node, 'name'):
>       member_id = node.name
>       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 :
> {code:title=code1.py|borderStyle=solid}
> if hasattr(node, 'name'):
>     member_id = node.name
> 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
(v6.3.4#6332)

Reply via email to