|  | /* | 
|  | Package gophercloud provides a multi-vendor interface to OpenStack-compatible | 
|  | clouds. The library has a three-level hierarchy: providers, services, and | 
|  | resources. | 
|  |  | 
|  | Provider structs represent the service providers that offer and manage a | 
|  | collection of services. Examples of providers include: OpenStack, Rackspace, | 
|  | HP. These are defined like so: | 
|  |  | 
|  | opts := gophercloud.AuthOptions{ | 
|  | IdentityEndpoint: "https://my-openstack.com:5000/v2.0", | 
|  | Username: "{username}", | 
|  | Password: "{password}", | 
|  | TenantID: "{tenant_id}", | 
|  | } | 
|  |  | 
|  | provider, err := openstack.AuthenticatedClient(opts) | 
|  |  | 
|  | Service structs are specific to a provider and handle all of the logic and | 
|  | operations for a particular OpenStack service. Examples of services include: | 
|  | Compute, Object Storage, Block Storage. In order to define one, you need to | 
|  | pass in the parent provider, like so: | 
|  |  | 
|  | opts := gophercloud.EndpointOpts{Region: "RegionOne"} | 
|  |  | 
|  | client := openstack.NewComputeV2(provider, opts) | 
|  |  | 
|  | Resource structs are the domain models that services make use of in order | 
|  | to work with and represent the state of API resources: | 
|  |  | 
|  | server, err := servers.Get(client, "{serverId}").Extract() | 
|  |  | 
|  | Intermediate Result structs are returned for API operations, which allow | 
|  | generic access to the HTTP headers, response body, and any errors associated | 
|  | with the network transaction. To turn a result into a usable resource struct, | 
|  | you must call the Extract method which is chained to the response, or an | 
|  | Extract function from an applicable extension: | 
|  |  | 
|  | result := servers.Get(client, "{serverId}") | 
|  |  | 
|  | // Attempt to extract the disk configuration from the OS-DCF disk config | 
|  | // extension: | 
|  | config, err := diskconfig.ExtractGet(result) | 
|  |  | 
|  | All requests that enumerate a collection return a Pager struct that is used to | 
|  | iterate through the results one page at a time. Use the EachPage method on that | 
|  | Pager to handle each successive Page in a closure, then use the appropriate | 
|  | extraction method from that request's package to interpret that Page as a slice | 
|  | of results: | 
|  |  | 
|  | err := servers.List(client, nil).EachPage(func (page pagination.Page) (bool, error) { | 
|  | s, err := servers.ExtractServers(page) | 
|  | if err != nil { | 
|  | return false, err | 
|  | } | 
|  |  | 
|  | // Handle the []servers.Server slice. | 
|  |  | 
|  | // Return "false" or an error to prematurely stop fetching new pages. | 
|  | return true, nil | 
|  | }) | 
|  |  | 
|  | This top-level package contains utility functions and data types that are used | 
|  | throughout the provider and service packages. Of particular note for end users | 
|  | are the AuthOptions and EndpointOpts structs. | 
|  | */ | 
|  | package gophercloud |