← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1703666] Re: Templated catalog does not handle multi-regions properly

 

Reviewed:  https://review.openstack.org/482364
Committed: https://git.openstack.org/cgit/openstack/keystone/commit/?id=1483e056bd26cc2802adbe6a4ad0beae32c374bb
Submitter: Zuul
Branch:    master

commit 1483e056bd26cc2802adbe6a4ad0beae32c374bb
Author: Erik Olof Gunnar Andersson <eandersson@xxxxxxxxxxxx>
Date:   Mon Jul 10 17:43:20 2017 -0700

    Fixing multi-region support in templated v3 catalog
    
    Previously each region had its own entry for each service_type
    with only it's own endpoints listed. This patch changes this
    so that each service type has the endpoints from all regions
    listed.
    
    We also move the flawed templated get_v3_catalog function call
    from the base catalog class into the templated class.
    
    Change-Id: Ifddf08990539b6ac7d8289d410092b2ae9f5cbed
    Closes-Bug: #1703666


** Changed in: keystone
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Identity (keystone).
https://bugs.launchpad.net/bugs/1703666

Title:
  Templated catalog does not handle multi-regions properly

Status in OpenStack Identity (keystone):
  Fix Released

Bug description:
  The current implementation of the keystone templated catalog does not
  group endpoints properly when there are multiple regions available.

  This is an working example when using the sql backend and the
  openstack catalog list command.

  | nova        | compute        | RegionTwo
  |             |                |   admin: http://10.0.3.15:8774/v2.1
  |             |                | RegionOne
  |             |                |   admin: http://10.0.2.15:8774/v2.1

  This is the same example using the templated backend and the openstack
  catalog list command.

  | nova        | compute        | RegionTwo
  |             |                |   admin: http://10.0.3.15:8774/v2.1
  | nova        | compute        | RegionOne
  |             |                |   admin: http://10.0.2.15:8774/v2.1

  This causes issues in services that expects each service_type to
  include the endpoint for all regions.

  This is because the code in for example Horizon is initially only
  looking for the service_type, which will return the first one, in this
  case is RegionTwo. If Horizon was requesting RegionOne, this would
  fail, as the list of endpoints would only contain RegionTwo.

  As a work-around for Horizon a change like this is required
  http://paste.openstack.org/show/614967/

   -def get_service_from_catalog(catalog, service_type):
   +def get_service_from_catalog(catalog, service_type, region):
        if catalog:
            for service in catalog:
                if 'type' not in service:
                    continue
                if service['type'] == service_type:
   -                return service
   +                for endpoint in service['endpoints']:
   +                    if endpoint['region'] == region:
   +                        return service
        return None

To manage notifications about this bug go to:
https://bugs.launchpad.net/keystone/+bug/1703666/+subscriptions


References