[
https://issues.apache.org/jira/browse/LIBCLOUD-879?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
charles walker closed LIBCLOUD-879.
-----------------------------------
Resolution: Fixed
Solved with change in code to allow LoadBalancer with node that do not have
publicIP.
> 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)