Blame vendor/github.com/gophercloud/gophercloud/doc.go

Packit 63bb0d
/*
Packit 63bb0d
Package gophercloud provides a multi-vendor interface to OpenStack-compatible
Packit 63bb0d
clouds. The library has a three-level hierarchy: providers, services, and
Packit 63bb0d
resources.
Packit 63bb0d
Packit 63bb0d
Authenticating with Providers
Packit 63bb0d
Packit 63bb0d
Provider structs represent the cloud providers that offer and manage a
Packit 63bb0d
collection of services. You will generally want to create one Provider
Packit 63bb0d
client per OpenStack cloud.
Packit 63bb0d
Packit 63bb0d
	It is now recommended to use the `clientconfig` package found at
Packit 63bb0d
	https://github.com/gophercloud/utils/tree/master/openstack/clientconfig
Packit 63bb0d
	for all authentication purposes.
Packit 63bb0d
Packit 63bb0d
	The below documentation is still relevant. clientconfig simply implements
Packit 63bb0d
	the below and presents it in an easier and more flexible way.
Packit 63bb0d
Packit 63bb0d
Use your OpenStack credentials to create a Provider client.  The
Packit 63bb0d
IdentityEndpoint is typically refered to as "auth_url" or "OS_AUTH_URL" in
Packit 63bb0d
information provided by the cloud operator. Additionally, the cloud may refer to
Packit 63bb0d
TenantID or TenantName as project_id and project_name. Credentials are
Packit 63bb0d
specified like so:
Packit 63bb0d
Packit 63bb0d
	opts := gophercloud.AuthOptions{
Packit 63bb0d
		IdentityEndpoint: "https://openstack.example.com:5000/v2.0",
Packit 63bb0d
		Username: "{username}",
Packit 63bb0d
		Password: "{password}",
Packit 63bb0d
		TenantID: "{tenant_id}",
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	provider, err := openstack.AuthenticatedClient(opts)
Packit 63bb0d
Packit 63bb0d
You can authenticate with a token by doing:
Packit 63bb0d
Packit 63bb0d
	opts := gophercloud.AuthOptions{
Packit 63bb0d
		IdentityEndpoint: "https://openstack.example.com:5000/v2.0",
Packit 63bb0d
		TokenID:  "{token_id}",
Packit 63bb0d
		TenantID: "{tenant_id}",
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	provider, err := openstack.AuthenticatedClient(opts)
Packit 63bb0d
Packit 63bb0d
You may also use the openstack.AuthOptionsFromEnv() helper function. This
Packit 63bb0d
function reads in standard environment variables frequently found in an
Packit 63bb0d
OpenStack `openrc` file. Again note that Gophercloud currently uses "tenant"
Packit 63bb0d
instead of "project".
Packit 63bb0d
Packit 63bb0d
	opts, err := openstack.AuthOptionsFromEnv()
Packit 63bb0d
	provider, err := openstack.AuthenticatedClient(opts)
Packit 63bb0d
Packit 63bb0d
Service Clients
Packit 63bb0d
Packit 63bb0d
Service structs are specific to a provider and handle all of the logic and
Packit 63bb0d
operations for a particular OpenStack service. Examples of services include:
Packit 63bb0d
Compute, Object Storage, Block Storage. In order to define one, you need to
Packit 63bb0d
pass in the parent provider, like so:
Packit 63bb0d
Packit 63bb0d
	opts := gophercloud.EndpointOpts{Region: "RegionOne"}
Packit 63bb0d
Packit 63bb0d
	client, err := openstack.NewComputeV2(provider, opts)
Packit 63bb0d
Packit 63bb0d
Resources
Packit 63bb0d
Packit 63bb0d
Resource structs are the domain models that services make use of in order
Packit 63bb0d
to work with and represent the state of API resources:
Packit 63bb0d
Packit 63bb0d
	server, err := servers.Get(client, "{serverId}").Extract()
Packit 63bb0d
Packit 63bb0d
Intermediate Result structs are returned for API operations, which allow
Packit 63bb0d
generic access to the HTTP headers, response body, and any errors associated
Packit 63bb0d
with the network transaction. To turn a result into a usable resource struct,
Packit 63bb0d
you must call the Extract method which is chained to the response, or an
Packit 63bb0d
Extract function from an applicable extension:
Packit 63bb0d
Packit 63bb0d
	result := servers.Get(client, "{serverId}")
Packit 63bb0d
Packit 63bb0d
	// Attempt to extract the disk configuration from the OS-DCF disk config
Packit 63bb0d
	// extension:
Packit 63bb0d
	config, err := diskconfig.ExtractGet(result)
Packit 63bb0d
Packit 63bb0d
All requests that enumerate a collection return a Pager struct that is used to
Packit 63bb0d
iterate through the results one page at a time. Use the EachPage method on that
Packit 63bb0d
Pager to handle each successive Page in a closure, then use the appropriate
Packit 63bb0d
extraction method from that request's package to interpret that Page as a slice
Packit 63bb0d
of results:
Packit 63bb0d
Packit 63bb0d
	err := servers.List(client, nil).EachPage(func (page pagination.Page) (bool, error) {
Packit 63bb0d
		s, err := servers.ExtractServers(page)
Packit 63bb0d
		if err != nil {
Packit 63bb0d
			return false, err
Packit 63bb0d
		}
Packit 63bb0d
Packit 63bb0d
		// Handle the []servers.Server slice.
Packit 63bb0d
Packit 63bb0d
		// Return "false" or an error to prematurely stop fetching new pages.
Packit 63bb0d
		return true, nil
Packit 63bb0d
	})
Packit 63bb0d
Packit 63bb0d
If you want to obtain the entire collection of pages without doing any
Packit 63bb0d
intermediary processing on each page, you can use the AllPages method:
Packit 63bb0d
Packit 63bb0d
	allPages, err := servers.List(client, nil).AllPages()
Packit 63bb0d
	allServers, err := servers.ExtractServers(allPages)
Packit 63bb0d
Packit 63bb0d
This top-level package contains utility functions and data types that are used
Packit 63bb0d
throughout the provider and service packages. Of particular note for end users
Packit 63bb0d
are the AuthOptions and EndpointOpts structs.
Packit 63bb0d
*/
Packit 63bb0d
package gophercloud