|  | /* | 
|  | 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() | 
|  |  | 
|  | Another convention is to return Result structs for API operations, which allow | 
|  | you to access the HTTP headers, response body, and associated errors with the | 
|  | network transaction. To get a resource struct, you then call the Extract | 
|  | method which is chained to the response. | 
|  | */ | 
|  | package gophercloud |