blob: 4988f1006203bdb8929d54da4e352603537ff67b [file] [log] [blame]
Ash Wilsonb8401a72014-09-08 17:07:49 -04001package gophercloud
2
3import "errors"
4
5var (
Ash Wilson1cd3e692014-09-09 11:01:47 -04006 // ErrServiceNotFound is returned when no service matches the EndpointOpts.
7 ErrServiceNotFound = errors.New("No suitable service could be found in the service catalog.")
8
Ash Wilsonb8401a72014-09-08 17:07:49 -04009 // ErrEndpointNotFound is returned when no available endpoints match the provided EndpointOpts.
10 ErrEndpointNotFound = errors.New("No suitable endpoint could be found in the service catalog.")
11)
12
Ash Wilsonefac18b2014-09-10 14:44:42 -040013// Availability describes the accessibility of a specific service endpoint.
Ash Wilson83f60cc2014-09-10 16:34:44 -040014// Identity v2 lists these as different kinds of URLs ("adminURL", "internalURL", and "publicURL"), while
15// v3 lists them as "Interfaces".
Ash Wilsonefac18b2014-09-10 14:44:42 -040016type Availability string
Ash Wilson0747d7e2014-09-09 14:27:35 -040017
18const (
Ash Wilsonefac18b2014-09-10 14:44:42 -040019 // AvailabilityAdmin makes an endpoint only available to administrators.
20 AvailabilityAdmin Availability = "admin"
Ash Wilson0747d7e2014-09-09 14:27:35 -040021
Ash Wilsonefac18b2014-09-10 14:44:42 -040022 // AvailabilityPublic makes an endpoint available to everyone.
23 AvailabilityPublic Availability = "public"
Ash Wilson0747d7e2014-09-09 14:27:35 -040024
Ash Wilsonefac18b2014-09-10 14:44:42 -040025 // AvailabilityInternal makes an endpoint only available within the cluster.
26 AvailabilityInternal Availability = "internal"
Ash Wilson0747d7e2014-09-09 14:27:35 -040027)
28
Ash Wilsonb8401a72014-09-08 17:07:49 -040029// EndpointOpts contains options for finding an endpoint for an Openstack client.
30type EndpointOpts struct {
31
32 // Type is the service type for the client (e.g., "compute", "object-store").
33 // Type is a required field.
34 Type string
35
36 // Name is the service name for the client (e.g., "nova").
37 // Name is not a required field, but it is used if present.
38 // Services can have the same Type but a different Name, which is one example of when both Type and Name are needed.
39 Name string
40
41 // Region is the region in which the service resides.
Ash Wilson51b4f1c2014-09-09 15:18:43 -040042 // Region must be specified for services that span multiple regions.
Ash Wilsonb8401a72014-09-08 17:07:49 -040043 Region string
44
Ash Wilsonefac18b2014-09-10 14:44:42 -040045 // Availability is the visibility of the endpoint to be returned: AvailabilityPublic, AvailabilityInternal, or AvailabilityAdmin.
46 // Availability is not required, and defaults to InterfacePublic.
47 // Not all providers or services offer all Availability options.
48 Availability Availability
Ash Wilsonb8401a72014-09-08 17:07:49 -040049}
50
51// EndpointLocator is a function that describes how to locate a single endpoint from a service catalog for a specific ProviderClient.
Ash Wilson51b4f1c2014-09-09 15:18:43 -040052// It should be set during ProviderClient authentication and used to discover related ServiceClients.
Ash Wilsonb8401a72014-09-08 17:07:49 -040053type EndpointLocator func(EndpointOpts) (string, error)