Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / github.com / gophercloud / gophercloud / endpoint_search.go
1 package gophercloud
2
3 // Availability indicates to whom a specific service endpoint is accessible:
4 // the internet at large, internal networks only, or only to administrators.
5 // Different identity services use different terminology for these. Identity v2
6 // lists them as different kinds of URLs within the service catalog ("adminURL",
7 // "internalURL", and "publicURL"), while v3 lists them as "Interfaces" in an
8 // endpoint's response.
9 type Availability string
10
11 const (
12         // AvailabilityAdmin indicates that an endpoint is only available to
13         // administrators.
14         AvailabilityAdmin Availability = "admin"
15
16         // AvailabilityPublic indicates that an endpoint is available to everyone on
17         // the internet.
18         AvailabilityPublic Availability = "public"
19
20         // AvailabilityInternal indicates that an endpoint is only available within
21         // the cluster's internal network.
22         AvailabilityInternal Availability = "internal"
23 )
24
25 // EndpointOpts specifies search criteria used by queries against an
26 // OpenStack service catalog. The options must contain enough information to
27 // unambiguously identify one, and only one, endpoint within the catalog.
28 //
29 // Usually, these are passed to service client factory functions in a provider
30 // package, like "openstack.NewComputeV2()".
31 type EndpointOpts struct {
32         // Type [required] is the service type for the client (e.g., "compute",
33         // "object-store"). Generally, this will be supplied by the service client
34         // function, but a user-given value will be honored if provided.
35         Type string
36
37         // Name [optional] is the service name for the client (e.g., "nova") as it
38         // appears in the service catalog. Services can have the same Type but a
39         // different Name, which is why both Type and Name are sometimes needed.
40         Name string
41
42         // Region [required] is the geographic region in which the endpoint resides,
43         // generally specifying which datacenter should house your resources.
44         // Required only for services that span multiple regions.
45         Region string
46
47         // Availability [optional] is the visibility of the endpoint to be returned.
48         // Valid types include the constants AvailabilityPublic, AvailabilityInternal,
49         // or AvailabilityAdmin from this package.
50         //
51         // Availability is not required, and defaults to AvailabilityPublic. Not all
52         // providers or services offer all Availability options.
53         Availability Availability
54 }
55
56 /*
57 EndpointLocator is an internal function to be used by provider implementations.
58
59 It provides an implementation that locates a single endpoint from a service
60 catalog for a specific ProviderClient based on user-provided EndpointOpts. The
61 provider then uses it to discover related ServiceClients.
62 */
63 type EndpointLocator func(EndpointOpts) (string, error)
64
65 // ApplyDefaults is an internal method to be used by provider implementations.
66 //
67 // It sets EndpointOpts fields if not already set, including a default type.
68 // Currently, EndpointOpts.Availability defaults to the public endpoint.
69 func (eo *EndpointOpts) ApplyDefaults(t string) {
70         if eo.Type == "" {
71                 eo.Type = t
72         }
73         if eo.Availability == "" {
74                 eo.Availability = AvailabilityPublic
75         }
76 }