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.
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()
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.
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
}
})