Move the Interface type and its consts.
diff --git a/acceptance/openstack/identity/v3/endpoint_test.go b/acceptance/openstack/identity/v3/endpoint_test.go
index 5f166c4..b8c1dcc 100644
--- a/acceptance/openstack/identity/v3/endpoint_test.go
+++ b/acceptance/openstack/identity/v3/endpoint_test.go
@@ -66,7 +66,7 @@
// Enumerate the endpoints available for this service.
endpointResults, err := endpoints3.List(client, endpoints3.ListOpts{
- Interface: endpoints3.InterfacePublic,
+ Interface: gophercloud.InterfacePublic,
ServiceID: computeService.ID,
})
diff --git a/endpoint_search.go b/endpoint_search.go
index 7611f19..4c89dc5 100644
--- a/endpoint_search.go
+++ b/endpoint_search.go
@@ -10,6 +10,20 @@
ErrEndpointNotFound = errors.New("No suitable endpoint could be found in the service catalog.")
)
+// Interface describes the accessibility of a specific service endpoint.
+type Interface string
+
+const (
+ // InterfaceAdmin makes an endpoint only available to administrators.
+ InterfaceAdmin Interface = "admin"
+
+ // InterfacePublic makes an endpoint available to everyone.
+ InterfacePublic Interface = "public"
+
+ // InterfaceInternal makes an endpoint only available within the cluster.
+ InterfaceInternal Interface = "internal"
+)
+
// EndpointOpts contains options for finding an endpoint for an Openstack client.
type EndpointOpts struct {
@@ -25,9 +39,10 @@
// Region is the region in which the service resides.
Region string
- // URLType is they type of endpoint to be returned (e.g., "public", "private").
- // URLType is not required, and defaults to "public".
- URLType string
+ // Interface is they type of endpoint to be returned: InterfacePublic, InterfaceInternal, or InterfaceAdmin
+ // Interface is not required, and defaults to InterfacePublic.
+ // Not all interface types are accepted by all providers or identity services.
+ Interface Interface
}
// EndpointLocator is a function that describes how to locate a single endpoint from a service catalog for a specific ProviderClient.
diff --git a/openstack/client.go b/openstack/client.go
index 7e9b628..3bbff12 100644
--- a/openstack/client.go
+++ b/openstack/client.go
@@ -153,13 +153,13 @@
// Extract the appropriate URL from the matching Endpoint.
for _, endpoint := range endpoints {
- switch opts.URLType {
- case "public", "":
+ switch opts.Interface {
+ case gophercloud.InterfacePublic:
return endpoint.PublicURL, nil
- case "private":
+ case gophercloud.InterfaceInternal:
return endpoint.InternalURL, nil
default:
- return "", fmt.Errorf("Unexpected URLType in endpoint query: %s", opts.URLType)
+ return "", fmt.Errorf("Unexpected interface in endpoint query: %s", opts.Interface)
}
}
@@ -195,17 +195,9 @@
}
func v3endpointLocator(v3Client *gophercloud.ServiceClient, opts gophercloud.EndpointOpts) (string, error) {
- // Transform URLType into an Interface.
- var endpointInterface = endpoints3.InterfacePublic
- switch opts.URLType {
- case "", "public":
- endpointInterface = endpoints3.InterfacePublic
- case "internal":
- endpointInterface = endpoints3.InterfaceInternal
- case "admin":
- endpointInterface = endpoints3.InterfaceAdmin
- default:
- return "", fmt.Errorf("Unrecognized URLType: %s", opts.URLType)
+ // Default Interface to InterfacePublic, if it isn't provided.
+ if opts.Interface == "" {
+ opts.Interface = gophercloud.InterfacePublic
}
// Discover the service we're interested in.
@@ -241,7 +233,7 @@
// Enumerate the endpoints available for this service.
endpointResults, err := endpoints3.List(v3Client, endpoints3.ListOpts{
- Interface: endpointInterface,
+ Interface: opts.Interface,
ServiceID: service.ID,
})
if err != nil {
diff --git a/openstack/identity/v3/endpoints/requests.go b/openstack/identity/v3/endpoints/requests.go
index 97cc3cf..65d505a 100644
--- a/openstack/identity/v3/endpoints/requests.go
+++ b/openstack/identity/v3/endpoints/requests.go
@@ -8,20 +8,6 @@
"github.com/rackspace/gophercloud/openstack/utils"
)
-// Interface describes the availability of a specific service endpoint.
-type Interface string
-
-const (
- // InterfaceAdmin makes an endpoint only available to administrators.
- InterfaceAdmin Interface = "admin"
-
- // InterfacePublic makes an endpoint available to everyone.
- InterfacePublic Interface = "public"
-
- // InterfaceInternal makes an endpoint only available within the cluster.
- InterfaceInternal Interface = "internal"
-)
-
// maybeString returns nil for empty strings and nil for empty.
func maybeString(original string) *string {
if original != "" {
@@ -32,7 +18,7 @@
// EndpointOpts contains the subset of Endpoint attributes that should be used to create or update an Endpoint.
type EndpointOpts struct {
- Interface Interface
+ Interface gophercloud.Interface
Name string
Region string
URL string
@@ -101,7 +87,7 @@
// ListOpts allows finer control over the the endpoints returned by a List call.
// All fields are optional.
type ListOpts struct {
- Interface Interface
+ Interface gophercloud.Interface
ServiceID string
Page int
PerPage int
diff --git a/openstack/identity/v3/endpoints/requests_test.go b/openstack/identity/v3/endpoints/requests_test.go
index f5705a0..a7088bb 100644
--- a/openstack/identity/v3/endpoints/requests_test.go
+++ b/openstack/identity/v3/endpoints/requests_test.go
@@ -59,7 +59,7 @@
client := serviceClient()
result, err := Create(client, EndpointOpts{
- Interface: InterfacePublic,
+ Interface: gophercloud.InterfacePublic,
Name: "the-endiest-of-points",
Region: "underground",
URL: "https://1.2.3.4:9000/",
@@ -71,7 +71,7 @@
expected := &Endpoint{
ID: "12",
- Interface: InterfacePublic,
+ Interface: gophercloud.InterfacePublic,
Name: "the-endiest-of-points",
Region: "underground",
ServiceID: "asdfasdfasdfasdf",
@@ -136,7 +136,7 @@
Endpoints: []Endpoint{
Endpoint{
ID: "12",
- Interface: InterfacePublic,
+ Interface: gophercloud.InterfacePublic,
Name: "the-endiest-of-points",
Region: "underground",
ServiceID: "asdfasdfasdfasdf",
@@ -144,7 +144,7 @@
},
Endpoint{
ID: "13",
- Interface: InterfaceInternal,
+ Interface: gophercloud.InterfaceInternal,
Name: "shhhh",
Region: "underground",
ServiceID: "asdfasdfasdfasdf",
@@ -202,7 +202,7 @@
expected := &Endpoint{
ID: "12",
- Interface: InterfacePublic,
+ Interface: gophercloud.InterfacePublic,
Name: "renamed",
Region: "somewhere-else",
ServiceID: "asdfasdfasdfasdf",
diff --git a/openstack/identity/v3/endpoints/results.go b/openstack/identity/v3/endpoints/results.go
index e972404..940eebc 100644
--- a/openstack/identity/v3/endpoints/results.go
+++ b/openstack/identity/v3/endpoints/results.go
@@ -9,12 +9,12 @@
// Endpoint describes the entry point for another service's API.
type Endpoint struct {
- ID string `json:"id"`
- Interface Interface `json:"interface"`
- Name string `json:"name"`
- Region string `json:"region"`
- ServiceID string `json:"service_id"`
- URL string `json:"url"`
+ ID string `json:"id"`
+ Interface gophercloud.Interface `json:"interface"`
+ Name string `json:"name"`
+ Region string `json:"region"`
+ ServiceID string `json:"service_id"`
+ URL string `json:"url"`
}
// EndpointList contains a page of Endpoint results.