Remove the original, flat v2 code.
diff --git a/openstack/identity/v2/common_test.go b/openstack/identity/v2/common_test.go
deleted file mode 100644
index 0260424..0000000
--- a/openstack/identity/v2/common_test.go
+++ /dev/null
@@ -1,224 +0,0 @@
-package v2
-
-// Taken from: http://docs.openstack.org/api/openstack-identity-service/2.0/content/POST_authenticate_v2.0_tokens_.html
-const authResultsOK = `{
-    "access":{
-        "token":{
-            "id": "ab48a9efdfedb23ty3494",
-            "expires": "2010-11-01T03:32:15-05:00",
-            "tenant":{
-                "id": "t1000",
-                "name": "My Project"
-            }
-        },
-        "user":{
-            "id": "u123",
-            "name": "jqsmith",
-            "roles":[{
-                    "id": "100",
-                    "name": "compute:admin"
-                },
-                {
-                    "id": "101",
-                    "name": "object-store:admin",
-                    "tenantId": "t1000"
-                }
-            ],
-            "roles_links":[]
-        },
-        "serviceCatalog":[{
-                "name": "Cloud Servers",
-                "type": "compute",
-                "endpoints":[{
-                        "tenantId": "t1000",
-                        "publicURL": "https://compute.north.host.com/v1/t1000",
-                        "internalURL": "https://compute.north.internal/v1/t1000",
-                        "region": "North",
-                        "versionId": "1",
-                        "versionInfo": "https://compute.north.host.com/v1/",
-                        "versionList": "https://compute.north.host.com/"
-                    },
-                    {
-                        "tenantId": "t1000",
-                        "publicURL": "https://compute.north.host.com/v1.1/t1000",
-                        "internalURL": "https://compute.north.internal/v1.1/t1000",
-                        "region": "North",
-                        "versionId": "1.1",
-                        "versionInfo": "https://compute.north.host.com/v1.1/",
-                        "versionList": "https://compute.north.host.com/"
-                    }
-                ],
-                "endpoints_links":[]
-            },
-            {
-                "name": "Cloud Files",
-                "type": "object-store",
-                "endpoints":[{
-                        "tenantId": "t1000",
-                        "publicURL": "https://storage.north.host.com/v1/t1000",
-                        "internalURL": "https://storage.north.internal/v1/t1000",
-                        "region": "North",
-                        "versionId": "1",
-                        "versionInfo": "https://storage.north.host.com/v1/",
-                        "versionList": "https://storage.north.host.com/"
-                    },
-                    {
-                        "tenantId": "t1000",
-                        "publicURL": "https://storage.south.host.com/v1/t1000",
-                        "internalURL": "https://storage.south.internal/v1/t1000",
-                        "region": "South",
-                        "versionId": "1",
-                        "versionInfo": "https://storage.south.host.com/v1/",
-                        "versionList": "https://storage.south.host.com/"
-                    }
-                ]
-            },
-            {
-                "name": "DNS-as-a-Service",
-                "type": "dnsextension:dns",
-                "endpoints":[{
-                        "tenantId": "t1000",
-                        "publicURL": "https://dns.host.com/v2.0/t1000",
-                        "versionId": "2.0",
-                        "versionInfo": "https://dns.host.com/v2.0/",
-                        "versionList": "https://dns.host.com/"
-                    }
-                ]
-            }
-        ]
-    }
-}`
-
-// Taken from: http://developer.openstack.org/api-ref-identity-v2.html
-const queryResults = `{
-	"extensions": {
-		"values": [
-			{
-				"updated": "2013-07-07T12:00:0-00:00",
-				"name": "OpenStack S3 API",
-				"links": [
-					{
-						"href": "https://github.com/openstack/identity-api",
-						"type": "text/html",
-						"rel": "describedby"
-					}
-				],
-				"namespace": "http://docs.openstack.org/identity/api/ext/s3tokens/v1.0",
-				"alias": "s3tokens",
-				"description": "OpenStack S3 API."
-			},
-			{
-				"updated": "2013-07-23T12:00:0-00:00",
-				"name": "OpenStack Keystone Endpoint Filter API",
-				"links": [
-					{
-						"href": "https://github.com/openstack/identity-api/blob/master/openstack-identity-api/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md",
-						"type": "text/html",
-						"rel": "describedby"
-					}
-				],
-				"namespace": "http://docs.openstack.org/identity/api/ext/OS-EP-FILTER/v1.0",
-				"alias": "OS-EP-FILTER",
-				"description": "OpenStack Keystone Endpoint Filter API."
-			},
-			{
-				"updated": "2013-12-17T12:00:0-00:00",
-				"name": "OpenStack Federation APIs",
-				"links": [
-					{
-						"href": "https://github.com/openstack/identity-api",
-						"type": "text/html",
-						"rel": "describedby"
-					}
-				],
-				"namespace": "http://docs.openstack.org/identity/api/ext/OS-FEDERATION/v1.0",
-				"alias": "OS-FEDERATION",
-				"description": "OpenStack Identity Providers Mechanism."
-			},
-			{
-				"updated": "2013-07-11T17:14:00-00:00",
-				"name": "OpenStack Keystone Admin",
-				"links": [
-					{
-						"href": "https://github.com/openstack/identity-api",
-						"type": "text/html",
-						"rel": "describedby"
-					}
-				],
-				"namespace": "http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0",
-				"alias": "OS-KSADM",
-				"description": "OpenStack extensions to Keystone v2.0 API enabling Administrative Operations."
-			},
-			{
-				"updated": "2014-01-20T12:00:0-00:00",
-				"name": "OpenStack Simple Certificate API",
-				"links": [
-					{
-						"href": "https://github.com/openstack/identity-api",
-						"type": "text/html",
-						"rel": "describedby"
-					}
-				],
-				"namespace": "http://docs.openstack.org/identity/api/ext/OS-SIMPLE-CERT/v1.0",
-				"alias": "OS-SIMPLE-CERT",
-				"description": "OpenStack simple certificate retrieval extension"
-			},
-			{
-				"updated": "2013-07-07T12:00:0-00:00",
-				"name": "OpenStack EC2 API",
-				"links": [
-					{
-						"href": "https://github.com/openstack/identity-api",
-						"type": "text/html",
-						"rel": "describedby"
-					}
-				],
-				"namespace": "http://docs.openstack.org/identity/api/ext/OS-EC2/v1.0",
-				"alias": "OS-EC2",
-				"description": "OpenStack EC2 Credentials backend."
-			}
-		]
-	}
-}`
-
-// Extensions query with a bogus JSON envelop.
-const bogusExtensionsResults = `{
-    "explosions":[{
-            "name": "Reset Password Extension",
-            "namespace": "http://docs.rackspacecloud.com/identity/api/ext/rpe/v2.0",
-            "alias": "RS-RPE",
-            "updated": "2011-01-22T13:25:27-06:00",
-            "description": "Adds the capability to reset a user's password. The user is emailed when the password has been reset.",
-            "links":[{
-                    "rel": "describedby",
-                    "type": "application/pdf",
-                    "href": "http://docs.rackspacecloud.com/identity/api/ext/identity-rpe-20111111.pdf"
-                },
-                {
-                    "rel": "describedby",
-                    "type": "application/vnd.sun.wadl+xml",
-                    "href": "http://docs.rackspacecloud.com/identity/api/ext/identity-rpe.wadl"
-                }
-            ]
-        },
-        {
-            "name": "User Metadata Extension",
-            "namespace": "http://docs.rackspacecloud.com/identity/api/ext/meta/v2.0",
-            "alias": "RS-META",
-            "updated": "2011-01-12T11:22:33-06:00",
-            "description": "Allows associating arbritrary metadata with a user.",
-            "links":[{
-                    "rel": "describedby",
-                    "type": "application/pdf",
-                    "href": "http://docs.rackspacecloud.com/identity/api/ext/identity-meta-20111201.pdf"
-                },
-                {
-                    "rel": "describedby",
-                    "type": "application/vnd.sun.wadl+xml",
-                    "href": "http://docs.rackspacecloud.com/identity/api/ext/identity-meta.wadl"
-                }
-            ]
-        }
-    ],
-    "extensions_links":[]
-}`
diff --git a/openstack/identity/v2/doc.go b/openstack/identity/v2/doc.go
deleted file mode 100644
index e8ab21b..0000000
--- a/openstack/identity/v2/doc.go
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-Package v2 identity provides convenient OpenStack Identity V2 API client access.
-This package currently doesn't support the administrative access endpoints, but may appear in the future based on demand.
-
-Authentication
-
-Established convention in the OpenStack community suggests the use of environment variables to hold authentication parameters.
-For example, the following settings would be sufficient to authenticate against Rackspace:
-
-	# assumes Bash shell on a POSIX environment; use SET command for Windows.
-	export OS_AUTH_URL=https://identity.api.rackspacecloud.com/v2.0
-	export OS_USERNAME=xxxx
-	export OS_PASSWORD=yyyy
-
-while you'd need these additional settings to authenticate against, e.g., Nebula One:
-
-	export OS_TENANT_ID=zzzz
-	export OS_TENANT_NAME=wwww
-
-Be sure to consult with your provider to see which settings you'll need to authenticate with.
-
-A skeletal client gets started with Gophercloud by authenticating against his/her provider, like so:
-
-	package main
-
-	import (
-		"fmt"
-		"github.com/rackspace/gophercloud/openstack/identity"
-		"github.com/rackspace/gophercloud/openstack/utils"
-	)
-
-	func main() {
-		// Create an initialized set of authentication options based on available OS_*
-		// environment variables.
-		ao, err := utils.AuthOptions()
-		if err != nil {
-			panic(err)
-		}
-
-		// Attempt to authenticate with them.
-		r, err := identity.Authenticate(ao)
-		if err != nil {
-			panic(err)
-		}
-
-		// With each authentication, you receive a master directory of all the services
-		// your account can access.  This "service catalog", as OpenStack calls it,
-		// provides you the means to exploit other OpenStack services.
-		sc, err := identity.GetServiceCatalog(r)
-		if err != nil {
-			panic(err)
-		}
-
-		// Find the desired service(s) for our application.
-		computeService, err := findService(sc, "compute", ...)
-		if err != nil {
-			panic(err)
-		}
-
-		blockStorage, err := findService(sc, "block-storage", ...)
-		if err != nil {
-			panic(err)
-		}
-
-		// ... etc ...
-	}
-
-NOTE!
-Unlike versions 0.1.x of the Gophercloud API,
-0.2.0 and later will not provide a service look-up mechanism as a built-in feature of the Identity SDK binding.
-The 0.1.x behavior potentially opened its non-US users to legal liability by potentially selecting endpoints in undesirable regions
-in a non-obvious manner if a specific region was not explicitly specified.
-Starting with 0.2.0 and beyond, you'll need to use either your own service catalog query function or one in a separate package.
-This makes it plainly visible to a code auditor that if you indeed desired automatic selection of an arbitrary region,
-you made the conscious choice to use that feature.
-
-Extensions
-
-Some OpenStack deployments may support features that other deployments do not.
-Anything beyond the scope of standard OpenStack must be scoped by an "extension," a named, yet well-known, change to the API.
-Users may invoke IsExtensionAvailable() after grabbing a list of extensions from the server with GetExtensions().
-This of course assumes you know the name of the extension ahead of time.
-
-Here's a simple example of listing all the aliases for supported extensions.
-Once you have an alias to an extension, everything else about it may be queried through accessors.
-
-	package main
-
-	import (
-		"fmt"
-		"github.com/rackspace/gophercloud/openstack/identity"
-		"github.com/rackspace/gophercloud/openstack/utils"
-	)
-
-	func main() {
-		// Create an initialized set of authentication options based on available OS_*
-		// environment variables.
-		ao, err := utils.AuthOptions()
-		if err != nil {
-			panic(err)
-		}
-
-		// Attempt to query extensions.
-		exts, err := identity.GetExtensions(ao)
-		if err != nil {
-			panic(err)
-		}
-
-		// Print out a summary of supported extensions
-		aliases, err := exts.Aliases()
-		if err != nil {
-			panic(err)
-		}
-		fmt.Println("Extension Aliases:")
-		for _, alias := range aliases {
-			fmt.Printf("  %s\n", alias)
-		}
-	}
-*/
-package v2
diff --git a/openstack/identity/v2/errors.go b/openstack/identity/v2/errors.go
deleted file mode 100644
index 0dd1172..0000000
--- a/openstack/identity/v2/errors.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package v2
-
-import "fmt"
-
-// ErrNotImplemented errors may occur in two contexts:
-// (1) development versions of this package may return this error for endpoints which are defined but not yet completed, and,
-// (2) production versions of this package may return this error when a provider fails to offer the requested Identity extension.
-//
-// ErrEndpoint errors occur when the authentication URL provided to Authenticate() either isn't valid
-// or the endpoint provided doesn't respond like an Identity V2 API endpoint should.
-//
-// ErrCredentials errors occur when authentication fails due to the caller possessing insufficient access privileges.
-var (
-	ErrNotImplemented = fmt.Errorf("Identity feature not yet implemented")
-	ErrEndpoint       = fmt.Errorf("Improper or missing Identity endpoint")
-	ErrCredentials    = fmt.Errorf("Improper or missing Identity credentials")
-)
diff --git a/openstack/identity/v2/extensions.go b/openstack/identity/v2/extensions.go
deleted file mode 100644
index df05a36..0000000
--- a/openstack/identity/v2/extensions.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package v2
-
-import (
-	"github.com/mitchellh/mapstructure"
-)
-
-// ExtensionDetails provides the details offered by the OpenStack Identity V2 extensions API
-// for a named extension.
-//
-// Name provides the name, presumably the same as that used to query the API with.
-//
-// Updated provides, in a sense, the version of the extension supported.  It gives the timestamp
-// of the most recent extension deployment.
-//
-// Description provides a more customer-oriented description of the extension.
-type ExtensionDetails struct {
-	Name        string
-	Namespace   string
-	Updated     string
-	Description string
-}
-
-// ExtensionsResult encapsulates the raw data returned by a call to
-// GetExtensions().  As OpenStack extensions may freely alter the response
-// bodies of structures returned to the client, you may only safely access the
-// data provided through separate, type-safe accessors or methods.
-type ExtensionsResult map[string]interface{}
-
-// IsExtensionAvailable returns true if and only if the provider supports the named extension.
-func (er ExtensionsResult) IsExtensionAvailable(alias string) bool {
-	e, err := extensions(er)
-	if err != nil {
-		return false
-	}
-	_, err = extensionIndexByAlias(e, alias)
-	return err == nil
-}
-
-// ExtensionDetailsByAlias returns more detail than the mere presence of an extension by the provider.
-// See the ExtensionDetails structure.
-func (er ExtensionsResult) ExtensionDetailsByAlias(alias string) (*ExtensionDetails, error) {
-	e, err := extensions(er)
-	if err != nil {
-		return nil, err
-	}
-	i, err := extensionIndexByAlias(e, alias)
-	if err != nil {
-		return nil, err
-	}
-	ed := &ExtensionDetails{}
-	err = mapstructure.Decode(e[i], ed)
-	return ed, err
-}
-
-func extensionIndexByAlias(records []interface{}, alias string) (int, error) {
-	for i, er := range records {
-		extensionRecord := er.(map[string]interface{})
-		if extensionRecord["alias"] == alias {
-			return i, nil
-		}
-	}
-	return 0, ErrNotImplemented
-}
-
-func extensions(er ExtensionsResult) ([]interface{}, error) {
-	ei, ok := er["extensions"]
-	if !ok {
-		return nil, ErrNotImplemented
-	}
-	e := ei.(map[string]interface{})
-	vi, ok := e["values"]
-	if !ok {
-		return nil, ErrNotImplemented
-	}
-	v := vi.([]interface{})
-	return v, nil
-}
-
-// Aliases returns the set of extension handles, or "aliases" as OpenStack calls them.
-// These are not the names of the extensions, but rather opaque, symbolic monikers for their corresponding extension.
-// Use the ExtensionDetailsByAlias() method to query more information for an extension if desired.
-func (er ExtensionsResult) Aliases() ([]string, error) {
-	e, err := extensions(er)
-	if err != nil {
-		return nil, err
-	}
-	aliases := make([]string, len(e))
-	for i, ex := range e {
-		ext := ex.(map[string]interface{})
-		extn, ok := ext["alias"]
-		if ok {
-			aliases[i] = extn.(string)
-		}
-	}
-	return aliases, nil
-}
diff --git a/openstack/identity/v2/extensions_test.go b/openstack/identity/v2/extensions_test.go
deleted file mode 100644
index 47f7e06..0000000
--- a/openstack/identity/v2/extensions_test.go
+++ /dev/null
@@ -1,112 +0,0 @@
-package v2
-
-import (
-	"encoding/json"
-	"testing"
-)
-
-func TestIsExtensionAvailable(t *testing.T) {
-	// Make a response as we'd expect from the IdentityService.GetExtensions() call.
-	getExtensionsResults := make(map[string]interface{})
-	err := json.Unmarshal([]byte(queryResults), &getExtensionsResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-
-	e := ExtensionsResult(getExtensionsResults)
-	for _, alias := range []string{"OS-KSADM", "OS-FEDERATION"} {
-		if !e.IsExtensionAvailable(alias) {
-			t.Errorf("Expected extension %s present.", alias)
-			return
-		}
-	}
-	if e.IsExtensionAvailable("blort") {
-		t.Errorf("Input JSON doesn't list blort as an extension")
-		return
-	}
-}
-
-func TestGetExtensionDetails(t *testing.T) {
-	// Make a response as we'd expect from the IdentityService.GetExtensions() call.
-	getExtensionsResults := make(map[string]interface{})
-	err := json.Unmarshal([]byte(queryResults), &getExtensionsResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-
-	e := ExtensionsResult(getExtensionsResults)
-	ed, err := e.ExtensionDetailsByAlias("OS-KSADM")
-	if err != nil {
-		t.Error(err)
-		return
-	}
-
-	actuals := map[string]string{
-		"name":        ed.Name,
-		"namespace":   ed.Namespace,
-		"updated":     ed.Updated,
-		"description": ed.Description,
-	}
-
-	expecteds := map[string]string{
-		"name":        "OpenStack Keystone Admin",
-		"namespace":   "http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0",
-		"updated":     "2013-07-11T17:14:00-00:00",
-		"description": "OpenStack extensions to Keystone v2.0 API enabling Administrative Operations.",
-	}
-
-	for k, v := range expecteds {
-		if actuals[k] != v {
-			t.Errorf("Expected %s \"%s\", got \"%s\" instead", k, v, actuals[k])
-			return
-		}
-	}
-}
-
-func TestMalformedResponses(t *testing.T) {
-	getExtensionsResults := make(map[string]interface{})
-	err := json.Unmarshal([]byte(bogusExtensionsResults), &getExtensionsResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	e := ExtensionsResult(getExtensionsResults)
-
-	_, err = e.ExtensionDetailsByAlias("OS-KSADM")
-	if err == nil {
-		t.Error("Expected ErrNotImplemented at least")
-		return
-	}
-	if err != ErrNotImplemented {
-		t.Error("Expected ErrNotImplemented")
-		return
-	}
-
-	if e.IsExtensionAvailable("anything at all") {
-		t.Error("No extensions are available with a bogus result.")
-		return
-	}
-}
-
-func TestAliases(t *testing.T) {
-	getExtensionsResults := make(map[string]interface{})
-	err := json.Unmarshal([]byte(queryResults), &getExtensionsResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-
-	e := ExtensionsResult(getExtensionsResults)
-	aliases, err := e.Aliases()
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	extensions := (((e["extensions"]).(map[string]interface{}))["values"]).([]interface{})
-	if len(aliases) != len(extensions) {
-		t.Error("Expected one alias name per extension")
-		return
-	}
-}
diff --git a/openstack/identity/v2/requests.go b/openstack/identity/v2/requests.go
deleted file mode 100644
index bb068b6..0000000
--- a/openstack/identity/v2/requests.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package v2
-
-import (
-	"github.com/racker/perigee"
-	"github.com/rackspace/gophercloud"
-)
-
-// AuthResults encapsulates the raw results from an authentication request.
-// As OpenStack allows extensions to influence the structure returned in
-// ways that Gophercloud cannot predict at compile-time, you should use
-// type-safe accessors to work with the data represented by this type,
-// such as ServiceCatalog() and Token().
-type AuthResults map[string]interface{}
-
-// Authenticate passes the supplied credentials to the OpenStack provider for authentication.
-// If successful, the caller may use Token() to retrieve the authentication token,
-// and ServiceCatalog() to retrieve the set of services available to the API user.
-func Authenticate(c *gophercloud.ServiceClient, options gophercloud.AuthOptions) (AuthResults, error) {
-	type AuthContainer struct {
-		Auth auth `json:"auth"`
-	}
-
-	var ar AuthResults
-
-	if c.Endpoint == "" {
-		return nil, ErrEndpoint
-	}
-
-	if (options.Username == "") || (options.Password == "" && options.APIKey == "") {
-		return nil, ErrCredentials
-	}
-
-	url := c.Endpoint + "tokens"
-	err := perigee.Post(url, perigee.Options{
-		ReqBody: &AuthContainer{
-			Auth: getAuthCredentials(options),
-		},
-		Results: &ar,
-	})
-	return ar, err
-}
-
-func getAuthCredentials(options gophercloud.AuthOptions) auth {
-	if options.APIKey == "" {
-		return auth{
-			PasswordCredentials: &struct {
-				Username string `json:"username"`
-				Password string `json:"password"`
-			}{
-				Username: options.Username,
-				Password: options.Password,
-			},
-			TenantID:   options.TenantID,
-			TenantName: options.TenantName,
-		}
-	}
-	return auth{
-		APIKeyCredentials: &struct {
-			Username string `json:"username"`
-			APIKey   string `json:"apiKey"`
-		}{
-			Username: options.Username,
-			APIKey:   options.APIKey,
-		},
-		TenantID:   options.TenantID,
-		TenantName: options.TenantName,
-	}
-}
-
-type auth struct {
-	PasswordCredentials interface{} `json:"passwordCredentials,omitempty"`
-	APIKeyCredentials   interface{} `json:"RAX-KSKEY:apiKeyCredentials,omitempty"`
-	TenantID            string      `json:"tenantId,omitempty"`
-	TenantName          string      `json:"tenantName,omitempty"`
-}
-
-// GetExtensions returns the OpenStack extensions available from this service.
-func GetExtensions(c *gophercloud.ServiceClient, options gophercloud.AuthOptions) (ExtensionsResult, error) {
-	var exts ExtensionsResult
-
-	url := c.Endpoint + "extensions"
-	err := perigee.Get(url, perigee.Options{
-		Results: &exts,
-	})
-	return exts, err
-}
diff --git a/openstack/identity/v2/service_catalog.go b/openstack/identity/v2/service_catalog.go
deleted file mode 100644
index 22d0d7b..0000000
--- a/openstack/identity/v2/service_catalog.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package v2
-
-import "github.com/mitchellh/mapstructure"
-
-// ServiceCatalog provides a view into the service catalog from a previous, successful authentication.
-// OpenStack extensions may alter the structure of the service catalog in ways unpredictable to Go at compile-time,
-// so this structure serves as a convenient anchor for type-safe accessors and methods.
-type ServiceCatalog struct {
-	serviceDescriptions []interface{}
-}
-
-// CatalogEntry provides a type-safe interface to an Identity API V2 service
-// catalog listing.  Each class of service, such as cloud DNS or block storage
-// services, will have a single CatalogEntry representing it.
-//
-// Name will contain the provider-specified name for the service.
-//
-// If OpenStack defines a type for the service, this field will contain that
-// type string.  Otherwise, for provider-specific services, the provider may
-// assign their own type strings.
-//
-// Endpoints will let the caller iterate over all the different endpoints that
-// may exist for the service.
-//
-// Note: when looking for the desired service, try, whenever possible, to key
-// off the type field.  Otherwise, you'll tie the representation of the service
-// to a specific provider.
-type CatalogEntry struct {
-	Name      string
-	Type      string
-	Endpoints []Endpoint
-}
-
-// Endpoint represents a single API endpoint offered by a service.
-// It provides the public and internal URLs, if supported, along with a region specifier, again if provided.
-// The significance of the Region field will depend upon your provider.
-//
-// In addition, the interface offered by the service will have version information associated with it
-// through the VersionId, VersionInfo, and VersionList fields, if provided or supported.
-//
-// In all cases, fields which aren't supported by the provider and service combined will assume a zero-value ("").
-type Endpoint struct {
-	TenantID    string
-	PublicURL   string
-	InternalURL string
-	Region      string
-	VersionID   string
-	VersionInfo string
-	VersionList string
-}
-
-// GetServiceCatalog acquires the service catalog from a successful authentication's results.
-func GetServiceCatalog(ar AuthResults) (*ServiceCatalog, error) {
-	access := ar["access"].(map[string]interface{})
-	sds := access["serviceCatalog"].([]interface{})
-	sc := &ServiceCatalog{
-		serviceDescriptions: sds,
-	}
-	return sc, nil
-}
-
-// NumberOfServices yields the number of services the caller may use.  Note
-// that this does not necessarily equal the number of endpoints available for
-// use.
-func (sc *ServiceCatalog) NumberOfServices() int {
-	return len(sc.serviceDescriptions)
-}
-
-// CatalogEntries returns a slice of service catalog entries.
-// Each entry corresponds to a specific class of service offered by the API provider.
-// See the CatalogEntry structure for more details.
-func (sc *ServiceCatalog) CatalogEntries() ([]CatalogEntry, error) {
-	var err error
-	ces := make([]CatalogEntry, sc.NumberOfServices())
-	for i, sd := range sc.serviceDescriptions {
-		d := sd.(map[string]interface{})
-		eps, err := parseEndpoints(d["endpoints"].([]interface{}))
-		if err != nil {
-			return ces, err
-		}
-		ces[i] = CatalogEntry{
-			Name:      d["name"].(string),
-			Type:      d["type"].(string),
-			Endpoints: eps,
-		}
-	}
-	return ces, err
-}
-
-func parseEndpoints(eps []interface{}) ([]Endpoint, error) {
-	var err error
-	result := make([]Endpoint, len(eps))
-	for i, ep := range eps {
-		e := Endpoint{}
-		err = mapstructure.Decode(ep, &e)
-		if err != nil {
-			return result, err
-		}
-		result[i] = e
-	}
-	return result, err
-}
diff --git a/openstack/identity/v2/service_catalog_test.go b/openstack/identity/v2/service_catalog_test.go
deleted file mode 100644
index 143b48f..0000000
--- a/openstack/identity/v2/service_catalog_test.go
+++ /dev/null
@@ -1,91 +0,0 @@
-package v2
-
-import (
-	"encoding/json"
-	"testing"
-)
-
-func TestServiceCatalog(t *testing.T) {
-	authResults := make(map[string]interface{})
-	err := json.Unmarshal([]byte(authResultsOK), &authResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-
-	sc, err := GetServiceCatalog(authResults)
-	if err != nil {
-		panic(err)
-	}
-
-	if sc.NumberOfServices() != 3 {
-		t.Errorf("Expected 3 services; got %d", sc.NumberOfServices())
-	}
-
-	ces, err := sc.CatalogEntries()
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	for _, ce := range ces {
-		if strNotInStrList(ce.Name, "Cloud Servers", "Cloud Files", "DNS-as-a-Service") {
-			t.Errorf("Expected \"%s\" to be one of Cloud Servers, Cloud Files, or DNS-as-a-Service", ce.Name)
-			return
-		}
-
-		if strNotInStrList(ce.Type, "dnsextension:dns", "object-store", "compute") {
-			t.Errorf("Expected \"%s\" to be one of dnsextension:dns, object-store, or compute")
-			return
-		}
-	}
-
-	eps := endpointsFor(ces, "compute")
-	if len(eps) != 2 {
-		t.Errorf("Expected 2 endpoints for compute service")
-		return
-	}
-	for _, ep := range eps {
-		if strNotInStrList(ep.VersionID, "1", "1.1", "1.1") {
-			t.Errorf("Expected versionID field of compute resource to be one of 1 or 1.1")
-			return
-		}
-	}
-
-	eps = endpointsFor(ces, "object-store")
-	if len(eps) != 2 {
-		t.Errorf("Expected 2 endpoints for object-store service")
-		return
-	}
-	for _, ep := range eps {
-		if ep.VersionID != "1" {
-			t.Errorf("Expected only version 1 object store API version")
-			return
-		}
-	}
-
-	eps = endpointsFor(ces, "dnsextension:dns")
-	if len(eps) != 1 {
-		t.Errorf("Expected 1 endpoint for DNS-as-a-Service service")
-		return
-	}
-	if eps[0].VersionID != "2.0" {
-		t.Errorf("Expected version 2.0 of DNS-as-a-Service service")
-		return
-	}
-}
-
-func endpointsFor(ces []CatalogEntry, t string) []Endpoint {
-	for _, ce := range ces {
-		if ce.Type == t {
-			return ce.Endpoints
-		}
-	}
-	panic("Precondition violated")
-}
-
-func strNotInStrList(needle, haystack1, haystack2, haystack3 string) bool {
-	if (needle != haystack1) && (needle != haystack2) && (needle != haystack3) {
-		return true
-	}
-	return false
-}
diff --git a/openstack/identity/v2/token.go b/openstack/identity/v2/token.go
deleted file mode 100644
index df67d76..0000000
--- a/openstack/identity/v2/token.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package v2
-
-import (
-	"github.com/mitchellh/mapstructure"
-)
-
-// Token provides only the most basic information related to an authentication token.
-//
-// Id provides the primary means of identifying a user to the OpenStack API.
-// OpenStack defines this field as an opaque value, so do not depend on its content.
-// It is safe, however, to compare for equality.
-//
-// Expires provides a timestamp in ISO 8601 format, indicating when the authentication token becomes invalid.
-// After this point in time, future API requests made using this authentication token will respond with errors.
-// Either the caller will need to reauthenticate manually, or more preferably, the caller should exploit automatic re-authentication.
-// See the AuthOptions structure for more details.
-//
-// TenantId provides the canonical means of identifying a tenant.
-// As with Id, this field is defined to be opaque, so do not depend on its content.
-// It is safe, however, to compare for equality.
-//
-// TenantName provides a human-readable tenant name corresponding to the TenantId.
-type Token struct {
-	ID, Expires          string
-	TenantID, TenantName string
-}
-
-// GetToken yields an unpacked collection of fields related to the user's access credentials, called a "token", if successful.
-// See the Token structure for more details.
-func GetToken(m AuthResults) (*Token, error) {
-	type (
-		Tenant struct {
-			ID   string
-			Name string
-		}
-
-		TokenDesc struct {
-			ID      string `mapstructure:"id"`
-			Expires string `mapstructure:"expires"`
-			Tenant
-		}
-	)
-
-	accessMap, err := getSubmap(m, "access")
-	if err != nil {
-		return nil, err
-	}
-	tokenMap, err := getSubmap(accessMap, "token")
-	if err != nil {
-		return nil, err
-	}
-	t := &TokenDesc{}
-	err = mapstructure.Decode(tokenMap, t)
-	if err != nil {
-		return nil, err
-	}
-	td := &Token{
-		ID:         t.ID,
-		Expires:    t.Expires,
-		TenantID:   t.Tenant.ID,
-		TenantName: t.Tenant.Name,
-	}
-	return td, nil
-}
-
-func getSubmap(m map[string]interface{}, name string) (map[string]interface{}, error) {
-	entry, ok := m[name]
-	if !ok {
-		return nil, ErrNotImplemented
-	}
-	return entry.(map[string]interface{}), nil
-}
diff --git a/openstack/identity/v2/token_test.go b/openstack/identity/v2/token_test.go
deleted file mode 100644
index 9770ed5..0000000
--- a/openstack/identity/v2/token_test.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package v2
-
-import (
-	"encoding/json"
-	"testing"
-)
-
-func TestAccessToken(t *testing.T) {
-	authResults := make(map[string]interface{})
-	err := json.Unmarshal([]byte(authResultsOK), &authResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-
-	tok, err := GetToken(authResults)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	if tok.ID != "ab48a9efdfedb23ty3494" {
-		t.Errorf("Expected token \"ab48a9efdfedb23ty3494\"; got \"%s\" instead", tok.ID)
-		return
-	}
-}