blob: 828bcfdab3d819fb7ddd654034c9cb820c0c5219 [file] [log] [blame]
Jamie Hannaford2aaf1a62014-10-16 12:55:50 +02001package gophercloud
2
3import "errors"
4
5var (
6 // ErrServiceNotFound is returned when no service matches the EndpointOpts.
7 ErrServiceNotFound = errors.New("No suitable service could be found in the service catalog.")
8
9 // 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
13// Availability describes the accessibility of a specific service endpoint.
14// Identity v2 lists these as different kinds of URLs ("adminURL", "internalURL", and "publicURL"), while
15// v3 lists them as "Interfaces".
16type Availability string
17
18const (
19 // AvailabilityAdmin makes an endpoint only available to administrators.
20 AvailabilityAdmin Availability = "admin"
21
22 // AvailabilityPublic makes an endpoint available to everyone.
23 AvailabilityPublic Availability = "public"
24
25 // AvailabilityInternal makes an endpoint only available within the cluster.
26 AvailabilityInternal Availability = "internal"
27)
28
29// 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.
42 // Region must be specified for services that span multiple regions.
43 Region string
44
45 // Availability is the visibility of the endpoint to be returned: AvailabilityPublic, AvailabilityInternal, or AvailabilityAdmin.
46 // Availability is not required, and defaults to AvailabilityPublic.
47 // Not all providers or services offer all Availability options.
48 Availability Availability
49}
50
51// EndpointLocator is a function that describes how to locate a single endpoint from a service catalog for a specific ProviderClient.
52// It should be set during ProviderClient authentication and used to discover related ServiceClients.
53type EndpointLocator func(EndpointOpts) (string, error)
54
55// ApplyDefaults sets EndpointOpts fields if not already set. Currently, EndpointOpts.Availability defaults to the public endpoint.
56func (eo *EndpointOpts) ApplyDefaults(t string) {
57 if eo.Type == "" {
58 eo.Type = t
59 }
60 if eo.Availability == "" {
61 eo.Availability = AvailabilityPublic
62 }
63}