libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ahuri3 <>
Subject [GitHub] libcloud pull request #1203: Fixed bug where the method _find_zone_or_region...
Date Thu, 26 Apr 2018 13:45:42 GMT
GitHub user Ahuri3 opened a pull request:

    Fixed bug where the method _find_zone_or_region cannot see some instances

    ## Fixed bug where _find_zone_or_region cannot see some instances
    ### Description
    The method `_find_zone_or_region` queries the google cloud api on the endpoint `instances.aggregatedList`.
    This endpoint cannot return more than 500 results but has a pagination mechanic. The method
`_find_zone_or_region` does not make use of the pagination mechanic because it made a manual
request to the api.
    I removed the manual request and replaced it by the  method `request_aggregated_items`
that was made for this exact purpose.
    This bug was found while trying to use the libcloud in ansible (via the gce_snapshot ansible
module) and getting an error ` "Node 'node_name'
not found in any zone."`. 
    Indeed without the pagination, if a google cloud project has more than 500 instances,
the code will crash when trying to identify the zone for a gce instance that wasn't in the
500 instances returned by the first api call. 
    Here is the stack trace I saw : 
    The full traceback is:
    Traceback (most recent call last):
      File "/tmp/ansible_qBlsq5/", line 225, in <module>
      File "/tmp/ansible_qBlsq5/", line 190, in main
        instance = gce.ex_get_node(instance_name, 'all')
      File "/var/lib/rundeck/.conda/envs/eva-prod/lib/python2.7/site-packages/libcloud/compute/drivers/",
line 7030, in ex_get_node
        name, 'instances', res_name='Node')
      File "/var/lib/rundeck/.conda/envs/eva-prod/lib/python2.7/site-packages/libcloud/compute/drivers/",
line 7561, in _find_zone_or_region
        (res_name, name, rz), None, None) "Node 'pr-op-cass00-0004' not found in any
    fatal: [pr-op-cass00-0004 -> localhost]: FAILED! => {
        "changed": false, 
        "module_stderr": "Traceback (most recent call last):\n  File \"/tmp/ansible_Gk7vXV/\",
line 225, in <module>\n    main()\n  File \"/tmp/ansible_Gk7vXV/\",
line 190, in main\n    instance = gce.ex_get_node(instance_name, 'all')\n  File \"/var/lib/rundeck/.conda/envs/eva-prod/lib/python2.7/site-packages/libcloud/compute/drivers/\",
line 7030, in ex_get_node\n    name, 'instances', res_name='Node')\n  File \"/var/lib/rundeck/.conda/envs/eva-prod/lib/python2.7/site-packages/libcloud/compute/drivers/\",
line 7561, in _find_zone_or_region\n    (res_name, name, rz), None, None)\
\"Node 'pr-op-cass00-0004' not found in any zone.\"\n", 
        "module_stdout": "", 
        "msg": "MODULE FAILURE", 
        "rc": 1
    ### Status
    ready for review
    ### Checklist (tick everything that applies)
    - [x] [Code linting](
(required, can be done after the PR checks)
      - No pagination was changed
      - Line lenght is shorter than 79 characters
    - [ ] Documentation
      - N/A
    - [x] [Tests](
      - Tested with `Python 2.7.13 :: Continuum Analytics, Inc.`
    - [ ] [ICLA](
(required for bigger changes)
      - N/A

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

    $ git pull fix_find_zone_or_region_by_using_request_aggregated_items

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 #1203
commit 4a7d884ca6e9d1864320bf3b21087fb66ac21d01
Author: Léo Ferlin-Sutton <lferlin@...>
Date:   2018-04-26T13:22:17Z

    Modified the way '_find_zone_or_region' gets data from the 'instances.aggregatedList'
api by using the method 'request_aggregated_items' which correctly paginates



View raw message