Comment 0 for bug 1081221

Revision history for this message
Boden R (boden) wrote :

This scenario occurs under the following conditions:

* A service of a given type (for example 'compute') is registered in keystone.
* There are more than 1 endpoints in keystone for the associated service's type. For example there are 2 different endpoints in keystone, both for the compute service of the 'compute' type.

In the above scenario a response from the POST /tokens API only returns a single endpoint per service type. So for example in the above scenario my endpoint catalog in the POST /tokens response would only include 1 'compute' service endpoint -- the other is not returned.

Note that in this scenario you can still use the admin API for GET /services -- this will return all endpoints regardless of if there are multiple endpoints for a single service.

See keystone.catalog.backend.sql.get_catalog()

To repo you can use the templated catalog driver with this templated catalog:
-------------
# config for TemplatedCatalog, using camelCase because I don't want to do
# translations for keystone compat
catalog.RegionOne.identity.publicURL = http://localhost:$(public_port)s/v2.0
catalog.RegionOne.identity.adminURL = http://localhost:$(admin_port)s/v2.0
catalog.RegionOne.identity.internalURL = http://localhost:$(public_port)s/v2.0
catalog.RegionOne.identity.name = Identity Service

# fake compute service for now to help novaclient tests work
catalog.RegionOne.compute.publicURL = http://localhost:$(compute_port)s/v1.1/$(tenant_id)s
catalog.RegionOne.compute.adminURL = http://localhost:$(compute_port)s/v1.1/$(tenant_id)s
catalog.RegionOne.compute.internalURL = http://localhost:$(compute_port)s/v1.1/$(tenant_id)s
catalog.RegionOne.compute.name = Compute Service

# 2nd compute endpoint for bug repo
catalog.RegionOne.compute.publicURL = http://localhost2:$(compute_port)s/v1.1/$(tenant_id)s
catalog.RegionOne.compute.adminURL = http://localhost2:$(compute_port)s/v1.1/$(tenant_id)s
catalog.RegionOne.compute.internalURL = http://localhost2:$(compute_port)s/v1.1/$(tenant_id)s
catalog.RegionOne.compute.name = Compute Service

catalog.RegionOne.volume.publicURL = http://localhost:8776/v1/$(tenant_id)s
catalog.RegionOne.volume.adminURL = http://localhost:8776/v1/$(tenant_id)s
catalog.RegionOne.volume.internalURL = http://localhost:8776/v1/$(tenant_id)s
catalog.RegionOne.volume.name = Volume Service

catalog.RegionOne.ec2.publicURL = http://localhost:8773/services/Cloud
catalog.RegionOne.ec2.adminURL = http://localhost:8773/services/Admin
catalog.RegionOne.ec2.internalURL = http://localhost:8773/services/Cloud
catalog.RegionOne.ec2.name = EC2 Service

catalog.RegionOne.image.publicURL = http://localhost:9292/v1
catalog.RegionOne.image.adminURL = http://localhost:9292/v1
catalog.RegionOne.image.internalURL = http://localhost:9292/v1
catalog.RegionOne.image.name = Image Service

-------------

When you do a POST /tokens, you get back a token which contains only a single set of endpoint links for 'compute':

{
            "endpoints_links":[

            ],
            "endpoints":[
               {
                  "adminURL":"http://localhost2:8774/v1.1/6f8945f2d47f4abea149b7a0176b12a8",
                  "region":"RegionOne",
                  "internalURL":"http://localhost2:8774/v1.1/6f8945f2d47f4abea149b7a0176b12a8",
                  "publicURL":"http://localhost2:8774/v1.1/6f8945f2d47f4abea149b7a0176b12a8"
               }
            ],
            "type":"compute",
            "name":"Compute Service"
         },