1package 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. 9type Availability string 10 11const ( 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()". 31type 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/* 57EndpointLocator is an internal function to be used by provider implementations. 58 59It provides an implementation that locates a single endpoint from a service 60catalog for a specific ProviderClient based on user-provided EndpointOpts. The 61provider then uses it to discover related ServiceClients. 62*/ 63type 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. 69func (eo *EndpointOpts) ApplyDefaults(t string) { 70 if eo.Type == "" { 71 eo.Type = t 72 } 73 if eo.Availability == "" { 74 eo.Availability = AvailabilityPublic 75 } 76} 77