Uploaded image for project: 'Libcloud'
  1. Libcloud
  2. LIBCLOUD-879

GCE Load balancer suppose that all VM have public ip

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: LoadBalancer
    • Labels:
      None
    • Environment:

      GCE MASTER

    • Flags:
      Patch

      Description

      When calling "list_members()" on a GCe load balancer libcloud object I end up with the following stack :

      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
      

      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 :

      code1.py
      if hasattr(node, 'name'):
      	member_id = node.name
      	member_ip = node.public_ips[0]
      else:
      	member_id = node
      	member_ip = None
      

      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 :

      code1.py
      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
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                charly37 charles walker
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - 1h
                  1h
                  Remaining:
                  Remaining Estimate - 1h
                  1h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified