Tokens

A token is an arbitrary bit of text that is used to access resources. Each token has a scope that describes which resources are accessible with it. A token may be revoked at anytime and is valid for a finite duration.

Generate a token

The nature of required and optional auth options will depend on your provider, but generally the Username and IdentityEndpoint fields are always required. Some providers will insist on a Password instead of an APIKey, others will prefer TenantID over TenantName - so it is always worth checking before writing your implementation in Go.

import "github.com/rackspace/gophercloud/openstack/identity/v2/tokens"

opts := tokens.AuthOptions{
  IdentityEndpoint: "{identityURL}",
  Username:         "{username}",
  APIKey:           "{apiKey}",
}

token, err := tokens.Create(client, opts).Extract()

Tenants

A tenant is a container used to group or isolate API resources. Depending on the provider, a tenant can map to a customer, account, organization, or project.

 List tenants

import (
  "github.com/rackspace/gophercloud/pagination"
  "github.com/rackspace/gophercloud/openstack/identity/v2/tenants"
)

// We have the option of filtering the tenant list. If we want the full
// collection, leave it as an empty struct
opts := tenants.ListOpts{Limit: 10}

// Retrieve a pager (i.e. a paginated collection)
pager := tenants.List(client, opts)

// Define an anonymous function to be executed on each page's iteration
err := pager.EachPage(func(page pagination.Page) (bool, error) {
  tenantList, err := tenants.ExtractTenants(page)

  for _, t := range tenantList {
    // "t" will be a tenants.Tenant
  }
})