The following is a central authority for handing out service types to
projects for their services.

Each OpenStack service with a REST API must have a well known service type.
The well known service type guarantees a documented API is available
for that service. Users of this service can trust that it will be the
same between different OpenStack environments.

The name of the OpenStack project that contains the definition of the API
claimed by this service type. OpenStack project source code is found in
https://git.openstack.org/openstack/{project}. If the API reference docs are
not found in the project repository, the api_reference_project field can be
used to indicate the repository in which they are found.

A published API reference document for the API identified by this
service type. If not specified in the source yaml file, it will be generated
as http://developer.openstack.org/api-ref/{service-type}/.

The list of aliases is only for communicating the existing
set of other names that services have gone by from the time before
this list existed. Changing a service-type is VERY BAD and
breaks users. It’s important to list them so that everyone can
share in the knowledge of what to do with the clouds that are out
there, but seriously, putting things here is only for documenting
history, not for making new changes.

A service must have one and only one known service type. However,
there are older names that have been commonly used for some services. In
order for API consumers to be able to count on the Service Types Authority
service-type as an inbound interface they expect, aliases provides a
ordered list of known fallback names. If an API consumer cannot find a given
service-type in the service-catalog, they are directed to try the
list of aliases here, in the order they are given, in order to find
the requested endpoint.

If secondary is set and is true, the project is not the primary service people
associate with the project codename. For instance, the nova project has
two services, compute and placement. compute is the primary
project. placement is secondary.

Established service types need not be forcefully retrofitted
to conform to these guidelines. For this reason you may see
entries such as ec2-api (contains a digit) or
clustering (an action, not a thing).

New service type names should:

Be English words

Match the regex ^[a-z][a-z-]*[a-z]$.

Be meaningful

Not use terms which are incredibly overloaded in OpenStack space
(e.g. policy)

The OpenStack Service Catalog can be used for listing services outside
of the standardized service types. There will be no official registry
of these types, so conflicts are possible. As such, the types should
include an org prefix ‘$org:’ where $org is something recognizable to
a particular organization and not part of the OpenStack ecosystem.

{"$schema":"http://json-schema.org/draft-04/schema#","id":"https://specs.openstack.org/openstack/service-types-authority/_downloads/schema.json#","type":"object","required":["services"],"additionalProperties":false,"properties":{"services":{"type":"array","items":{"$ref":"#/definitions/service"}}},"definitions":{"service":{"properties":{"service_type":{"type":"string","pattern":"^([a-z][a-z-]*[a-z]+|ec2-api)$","description":"The unique identifier for the service to be used in the service catalog"},"project":{"type":"string","pattern":"^([a-z][a-z-]*[a-z]+|ec2-api)$","description":"The OpenStack project name that contains the definition of the API"},"api_reference":{"type":"string","format":"url","description":"A published API reference document for the API identified by this service type."},"api_reference_project":{"type":"string","description":"Project where API reference is found, if not the same as the main project"},"description":{"type":"string","description":"A short description about the service in question."},"aliases":{"type":"array","items":{"type":"string"},"description":"An ordered list of historical aliases for this service type."},"secondary":{"type":"boolean","description":"Is this a secondary service for a project?"}},"additionalProperties":false,"required":["api_reference","project","service_type"]}}}

{"$schema":"http://json-schema.org/draft-04/schema#","id":"https://specs.openstack.org/openstack/service-types-authority/_downloads/schema.json#","type":"object","required":["services"],"additionalProperties":false,"properties":{"services":{"type":"array","items":{"$ref":"#/definitions/service"}}},"definitions":{"service":{"properties":{"service_type":{"type":"string","pattern":"^([a-z][a-z-]*[a-z]+|ec2-api)$","description":"The unique identifier for the service to be used in the service catalog"},"project":{"type":"string","pattern":"^([a-z][a-z-]*[a-z]+|ec2-api)$","description":"The OpenStack project name that contains the definition of the API"},"api_reference":{"type":"string","format":"url","description":"A published API reference document for the API identified by this service type."},"api_reference_project":{"type":"string","description":"Project where API reference is found, if not the same as the main project"},"description":{"type":"string","description":"A short description about the service in question."},"aliases":{"type":"array","items":{"type":"string"},"description":"An ordered list of historical aliases for this service type."},"secondary":{"type":"boolean","description":"Is this a secondary service for a project?"}},"additionalProperties":false,"required":["api_reference","project","service_type"]}}}