github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/endpoint_search.go (about)

     1  package golangsdk
     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  }