Ash Wilson | 3d89f20 | 2014-10-31 10:23:29 -0400 | [diff] [blame] | 1 | /* |
| 2 | Package gophercloud provides a multi-vendor interface to OpenStack-compatible |
| 3 | clouds. The library has a three-level hierarchy: providers, services, and |
| 4 | resources. |
| 5 | |
| 6 | Provider structs represent the service providers that offer and manage a |
| 7 | collection of services. Examples of providers include: OpenStack, Rackspace, |
| 8 | HP. These are defined like so: |
| 9 | |
| 10 | opts := gophercloud.AuthOptions{ |
| 11 | IdentityEndpoint: "https://my-openstack.com:5000/v2.0", |
| 12 | Username: "{username}", |
| 13 | Password: "{password}", |
| 14 | TenantID: "{tenant_id}", |
| 15 | } |
| 16 | |
| 17 | provider, err := openstack.AuthenticatedClient(opts) |
| 18 | |
| 19 | Service structs are specific to a provider and handle all of the logic and |
| 20 | operations for a particular OpenStack service. Examples of services include: |
| 21 | Compute, Object Storage, Block Storage. In order to define one, you need to |
| 22 | pass in the parent provider, like so: |
| 23 | |
| 24 | opts := gophercloud.EndpointOpts{Region: "RegionOne"} |
| 25 | |
| 26 | client := openstack.NewComputeV2(provider, opts) |
| 27 | |
| 28 | Resource structs are the domain models that services make use of in order |
| 29 | to work with and represent the state of API resources: |
| 30 | |
| 31 | server, err := servers.Get(client, "{serverId}").Extract() |
| 32 | |
| 33 | Intermediate Result structs are returned for API operations, which allow |
| 34 | generic access to the HTTP headers, response body, and any errors associated |
| 35 | with the network transaction. To turn a result into a usable resource struct, |
| 36 | you must call the Extract method which is chained to the response, or an |
| 37 | Extract function from an applicable extension: |
| 38 | |
| 39 | result := servers.Get(client, "{serverId}") |
| 40 | |
| 41 | // Attempt to extract the disk configuration from the OS-DCF disk config |
| 42 | // extension: |
| 43 | config, err := diskconfig.ExtractGet(result) |
| 44 | |
| 45 | All requests that enumerate a collection return a Pager struct that is used to |
| 46 | iterate through the results one page at a time. Use the EachPage method on that |
| 47 | Pager to handle each successive Page in a closure, then use the appropriate |
Ash Wilson | aa88fd9 | 2014-10-31 16:11:57 -0400 | [diff] [blame] | 48 | extraction method from that request's package to interpret that Page as a slice |
Ash Wilson | 3d89f20 | 2014-10-31 10:23:29 -0400 | [diff] [blame] | 49 | of results: |
| 50 | |
| 51 | err := servers.List(client, nil).EachPage(func (page pagination.Page) (bool, error) { |
| 52 | s, err := servers.ExtractServers(page) |
| 53 | if err != nil { |
| 54 | return false, err |
| 55 | } |
| 56 | |
| 57 | // Handle the []servers.Server slice. |
| 58 | |
| 59 | // Return "false" or an error to prematurely stop fetching new pages. |
| 60 | return true, nil |
| 61 | }) |
| 62 | |
| 63 | This top-level package contains utility functions and data types that are used |
| 64 | throughout the provider and service packages. Of particular note for end users |
| 65 | are the AuthOptions and EndpointOpts structs. |
| 66 | */ |
| 67 | package gophercloud |