You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by "charles walker (JIRA)" <ji...@apache.org> on 2016/11/23 01:30:58 UTC

[jira] [Comment Edited] (LIBCLOUD-879) GCE Load balancer suppose that all VM have public ip

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

charles walker edited comment on LIBCLOUD-879 at 11/23/16 1:30 AM:
-------------------------------------------------------------------

I give it a try tonight and it break the test case because the node object can be a string. This works better :
{noformat}
@@ -338,9 +338,12 @@ class GCELBDriver(Driver):
         # would be found if it was there.
         if hasattr(node, 'name'):
             member_id = node.name
-            member_ip = node.public_ips[0]
         else:
             member_id = node
+
+        if (hasattr(node, 'public_ips') and (len(node.public_ips) > 0)):
+            member_ip = node.public_ips[0]
+        else:
             member_ip = None
{noformat}



was (Author: charly37):
I give it a try tonight and it break the test case because the node object can be a string. This works better :
@@ -338,9 +338,12 @@ class GCELBDriver(Driver):
         # would be found if it was there.
         if hasattr(node, 'name'):
             member_id = node.name
-            member_ip = node.public_ips[0]
         else:
             member_id = node
+
+        if (hasattr(node, 'public_ips') and (len(node.public_ips) > 0)):
+            member_ip = node.public_ips[0]
+        else:
             member_ip = None



> 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)