Discoverable and Hierarchical Catalog

Registered by Fabio Giannetti

The current Keystone catalog does not have a coherent design to address a typical IT catalog stack. The lack of data organization and self-discovery approach makes it very limited in use and does not provide a good solution for a global service catalog that can support IaaS, PaaS and SaaS.

Our approach is to change the catalog definition to make it easy to discover the services, their geographical location, type and access interfaces.
The proposed solution is to create a catalog that is built on a hierarchical structure.

The tree-like structure can be then navigated using a set of links that provides URL pointing to the next level in the hierarchy something like, child/parent relationship.

Blueprint information

Status:
Complete
Approver:
None
Priority:
Undefined
Drafter:
Fabio Giannetti
Direction:
Needs approval
Assignee:
None
Definition:
Obsolete
Series goal:
None
Implementation:
Unknown
Milestone target:
None
Completed by
Morgan Fainberg

Related branches

Sprints

Whiteboard

(morganfainberg): This is implemented effectively via regions. Marking as obsolte.

GET v3/catalog -- only the v3 services

GET v2/catalog -- only the v2 services

GET /catalog -- all the v2/v3/vN services

Will return the following response:
{
    "catalog": {
        "services": [
            {
                "description": "OpenStack Volume Service",
                "id": "ee057c",
                "links": {
                    "self": "https://identity:35357/v3/services/ee057c"
                },
                "name": "Cinder",
                "type": "volume",
                "regions": [
                     {
                         "description": "--description--",
                         "id": "us",
                         "links": {
                             "self": "https://identity:35357/v3/regions/us"
                         },
                         "regions": [
                               {
                                  "description": "--description--",
                                  "id": "east",
                                  "links": {
                                     "self": "https://identity:35357/v3/regions/east"
                                  },
                                  "interfaces" : [
                                      {
                                          "name": "admin",
                                          "id": "0aaa0",
                                          "links": {
                                             "self": "https://identity:35357/v3/interfaces/0aaa0"
                                          },
                                          "endpoints": [
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "1fedc0",
                                                       "url": "http://identity:35357/v3/endpoints/1fedc0",
                                                       "links": {
                                                          "self": "https://identity:35357/v3/endpoints/1fedc0"
                                                       }
                                                   }
                                                },
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "1fedc1",
                                                       "url": "http://identity:35357/v3/endpoints/1fedc1",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/1fedc1"
                                                       }
                                                   }
                                                }
                                           ]
                                       },
                                       {
                                          "name": "internal",
                                          "id": "0iii0",
                                          "links": {
                                               "self": "https://identity:35357/v3/interfaces/0iii0"
                                          },
                                          "endpoints": [
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "2fedc0",
                                                       "url": "http://identity:35357/v3/endpoints/2fedc0",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/2fedc0"
                                                       }
                                                   }
                                                },
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "2fedc1",
                                                       "url": "http://identity:35357/v3/endpoints/2fedc1",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/2fedc1"
                                                       }
                                                   }
                                                }
                                           ]
                                       },
                                       {
                                          "name": "public",
                                          "id": "0pppp0",
                                          "links": {
                                               "self": "https://identity:35357/v3/interfaces/0pppp0"
                                          },
                                          "endpoints": [
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "3fedc0",
                                                       "url": "http://identity:35357/v3/endpoints/3fedc0",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/3fedc0"
                                                       }
                                                   }
                                                },
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "3fedc1",
                                                       "url": "http://identity:35357/v3/endpoints/3fedc1",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/3fedc1"
                                                       }
                                                   }
                                                }
                                           ]
                                       }
                                   ]
                               },
                               {
                                  "description": "--description--",
                                  "id": "west",
                                  "links": {
                                     "self": "https://identity:35357/v3/regions/west"
                                  },
                                  "interfaces" : [
                                      {
                                          "name": "admin",
                                          "id": "0aaa0",
                                          "links": {
                                             "self": "https://identity:35357/v3/interfaces/0aaa0"
                                          },
                                          "endpoints": [
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "4fedc0",
                                                       "url": "http://identity:35357/v3/endpoints/4fedc0",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/4fedc0"
                                                       }
                                                   }
                                                },
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "4fedc1",
                                                       "url": "http://identity:35357/v3/endpoints/4fedc1",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/4fedc1"
                                                       }
                                                   }
                                                }
                                           ]
                                       },
                                       {
                                          "name": "internal",
                                          "id": "0iii0",
                                          "links": {
                                               "self": "https://identity:35357/v3/interfaces/0iii0"
                                          },
                                          "endpoints": [
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "5fedc0",
                                                       "url": "http://identity:35357/v3/endpoints/5fedc0",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/5fedc0"
                                                       }
                                                   }
                                                },
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "5fedc1",
                                                       "url": "http://identity:35357/v3/endpoints/5fedc1",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/5fedc1"
                                                       }
                                                   }
                                                }
                                           ]
                                       },
                                       {
                                          "name": "public",
                                          "id": "0pppp0",
                                          links": {
                                               "self": "https://identity:35357/v3/interfaces/0pppp0"
                                          },
                                          "endpoints": [
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "6fedc0",
                                                       "url": "http://identity:35357/v3/endpoints/6fedc0",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/6fedc0"
                                                       }
                                                   }
                                                },
                                                {
                                                   "endpoint": {
                                                       "enabled": true,
                                                       "id": "6fedc1",
                                                       "url": "http://identity:35357/v3/endpoints/6fedc1",
                                                       "links": {
                                                           "self": "https://identity:35357/v3/endpoints/6fedc1"
                                                       }
                                                   }
                                                }
                                           ]
                                       }
                                   ]
                               }
                          ]
                     }
                 ]
             },
             ...
          }
       ]
    }
}

It is possible to perform requests that are traversing the tree to obtain directly a sub-tree, e.g.:
GET v3/catalog/services/type/<type-name>/regions/<region-id>

This would allow to retrieve all the services, e.g. compute, that are available in a certain region.

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.