Support multiple endpoints for the same service

Registered by Gabriel Hurley

The Keystone service catalog can contain multiple endpoints for the same service in a given region, but Horizon only uses the first one and doesn't give any option for selecting regions by name, etc. We should enable the use of alternate endpoints, probably in a configurable fashion (round-robin vs. random vs. selectable) to enable various use-cases.

Large questions remain on whether or not there should be the ability to have "default" services that can serve across various regions if a service is not present in one, etc.

Blueprint information

Status:
Complete
Approver:
Gabriel Hurley
Priority:
Low
Drafter:
Gabriel Hurley
Direction:
Needs approval
Assignee:
David Lyle
Definition:
Drafting
Series goal:
Accepted for havana
Implementation:
Implemented
Milestone target:
milestone icon 2013.2
Started by
David Lyle
Completed by
David Lyle

Related branches

Sprints

Whiteboard

[gabrielhurley] Notes from the Havana summit discussion:

Multiple Endpoints and Regions:
All available endpoints are returned by Keystone in the service catalog

Limitations of current model:
Selects first endpoint for each matching service.
If more than one nova endpoint, e.g., is available managing separate nova regions/zones, no way to manage nova instances managed by these other endpoints

Additionally, there is no guarantee that if multiple nova/cinder/quantum endpoints managing different regions are returned by keystone that the first endpoint for each service are for the same management group.

Existing Blueprint - https://blueprints.launchpad.net/horizon/+spec/multiple-service-endpoints

Keystone v3 adds optional region field allowing multiple regions support -- this adds to the complexity of possible configurations

Additionally, Keystone v3 creates lists interfaces (public, internal, admin) separately.

Need a way to select which endpoint/region communicating with for each service

To reuse, simplify, could add a way to define region sets to be stored in a cookie:
region-A : quantum1, cinder2, nova1
region-B : quantum2, cinder1, nova2

Project panel: manage one region/endpoint set at a time
Admin panel: manage one or all region/endpoint? support an arbitrary # of tables and the associated actions

[davidlyle]
Proposed layout for first work item: http://imgur.com/gIh8MFh

This is a high level region selector that provides all regions found in the user's service catalog.

It appears on both the project and admin dashboards. If only one region is present in the service
catalog the region selector is not seen on either dashboard.

Support for selecting a region is ready for review. Needs openstack_auth change first.

Openstack_auth code ready for review: https://github.com/gabrielhurley/django_openstack_auth/pull/42

Gerrit topic: https://review.openstack.org/#q,topic:bp/will,n,z

Addressed by: https://review.openstack.org/28855
    Region selector enabling multi-region support.

Moving multiple endpoints in the same region to a new blueprint.

(?)

Work Items

Work items:
Implement a simple region selector: DONE
Add Keystone v3 service catalog support: DONE