| // Package clients contains functions for creating OpenStack service clients |
| // for use in acceptance tests. It also manages the required environment |
| // variables to run the tests. |
| package clients |
| |
| import ( |
| "fmt" |
| "os" |
| "strings" |
| |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git" |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack" |
| ) |
| |
| // AcceptanceTestChoices contains image and flavor selections for use by the acceptance tests. |
| type AcceptanceTestChoices struct { |
| // ImageID contains the ID of a valid image. |
| ImageID string |
| |
| // FlavorID contains the ID of a valid flavor. |
| FlavorID string |
| |
| // FlavorIDResize contains the ID of a different flavor available on the same OpenStack installation, that is distinct |
| // from FlavorID. |
| FlavorIDResize string |
| |
| // FloatingIPPool contains the name of the pool from where to obtain floating IPs. |
| FloatingIPPoolName string |
| |
| // NetworkName is the name of a network to launch the instance on. |
| NetworkName string |
| |
| // ExternalNetworkID is the network ID of the external network. |
| ExternalNetworkID string |
| |
| // ShareNetworkID is the Manila Share network ID |
| ShareNetworkID string |
| } |
| |
| // AcceptanceTestChoicesFromEnv populates a ComputeChoices struct from environment variables. |
| // If any required state is missing, an `error` will be returned that enumerates the missing properties. |
| func AcceptanceTestChoicesFromEnv() (*AcceptanceTestChoices, error) { |
| imageID := os.Getenv("OS_IMAGE_ID") |
| flavorID := os.Getenv("OS_FLAVOR_ID") |
| flavorIDResize := os.Getenv("OS_FLAVOR_ID_RESIZE") |
| networkName := os.Getenv("OS_NETWORK_NAME") |
| floatingIPPoolName := os.Getenv("OS_POOL_NAME") |
| externalNetworkID := os.Getenv("OS_EXTGW_ID") |
| shareNetworkID := os.Getenv("OS_SHARE_NETWORK_ID") |
| |
| missing := make([]string, 0, 3) |
| if imageID == "" { |
| missing = append(missing, "OS_IMAGE_ID") |
| } |
| if flavorID == "" { |
| missing = append(missing, "OS_FLAVOR_ID") |
| } |
| if flavorIDResize == "" { |
| missing = append(missing, "OS_FLAVOR_ID_RESIZE") |
| } |
| if floatingIPPoolName == "" { |
| missing = append(missing, "OS_POOL_NAME") |
| } |
| if externalNetworkID == "" { |
| missing = append(missing, "OS_EXTGW_ID") |
| } |
| if networkName == "" { |
| networkName = "private" |
| } |
| if shareNetworkID == "" { |
| missing = append(missing, "OS_SHARE_NETWORK_ID") |
| } |
| notDistinct := "" |
| if flavorID == flavorIDResize { |
| notDistinct = "OS_FLAVOR_ID and OS_FLAVOR_ID_RESIZE must be distinct." |
| } |
| |
| if len(missing) > 0 || notDistinct != "" { |
| text := "You're missing some important setup:\n" |
| if len(missing) > 0 { |
| text += " * These environment variables must be provided: " + strings.Join(missing, ", ") + "\n" |
| } |
| if notDistinct != "" { |
| text += " * " + notDistinct + "\n" |
| } |
| |
| return nil, fmt.Errorf(text) |
| } |
| |
| return &AcceptanceTestChoices{ |
| ImageID: imageID, |
| FlavorID: flavorID, |
| FlavorIDResize: flavorIDResize, |
| FloatingIPPoolName: floatingIPPoolName, |
| NetworkName: networkName, |
| ExternalNetworkID: externalNetworkID, |
| ShareNetworkID: shareNetworkID, |
| }, nil |
| } |
| |
| // NewBlockStorageV1Client returns a *ServiceClient for making calls |
| // to the OpenStack Block Storage v1 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewBlockStorageV1Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewBlockStorageV1(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewBlockStorageV2Client returns a *ServiceClient for making calls |
| // to the OpenStack Block Storage v2 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewBlockStorageV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewBlockStorageV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewSharedFileSystemV2Client returns a *ServiceClient for making calls |
| // to the OpenStack Shared File System v2 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewSharedFileSystemV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewSharedFileSystemV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewComputeV2Client returns a *ServiceClient for making calls |
| // to the OpenStack Compute v2 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewComputeV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewComputeV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewDNSV2Client returns a *ServiceClient for making calls |
| // to the OpenStack Compute v2 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewDNSV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewDNSV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewIdentityV2Client returns a *ServiceClient for making calls |
| // to the OpenStack Identity v2 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewIdentityV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewIdentityV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewIdentityV2AdminClient returns a *ServiceClient for making calls |
| // to the Admin Endpoint of the OpenStack Identity v2 API. An error |
| // will be returned if authentication or client creation was not possible. |
| func NewIdentityV2AdminClient() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewIdentityV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| Availability: gophercloud.AvailabilityAdmin, |
| }) |
| } |
| |
| // NewIdentityV2UnauthenticatedClient returns an unauthenticated *ServiceClient |
| // for the OpenStack Identity v2 API. An error will be returned if |
| // authentication or client creation was not possible. |
| func NewIdentityV2UnauthenticatedClient() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.NewClient(ao.IdentityEndpoint) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewIdentityV2(client, gophercloud.EndpointOpts{}) |
| } |
| |
| // NewIdentityV3Client returns a *ServiceClient for making calls |
| // to the OpenStack Identity v3 API. An error will be returned |
| // if authentication or client creation was not possible. |
| func NewIdentityV3Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewIdentityV3(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewIdentityV3UnauthenticatedClient returns an unauthenticated *ServiceClient |
| // for the OpenStack Identity v3 API. An error will be returned if |
| // authentication or client creation was not possible. |
| func NewIdentityV3UnauthenticatedClient() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.NewClient(ao.IdentityEndpoint) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewIdentityV3(client, gophercloud.EndpointOpts{}) |
| } |
| |
| // NewImageServiceV2Client returns a *ServiceClient for making calls to the |
| // OpenStack Image v2 API. An error will be returned if authentication or |
| // client creation was not possible. |
| func NewImageServiceV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewImageServiceV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |
| |
| // NewNetworkV2Client returns a *ServiceClient for making calls to the |
| // OpenStack Networking v2 API. An error will be returned if authentication |
| // or client creation was not possible. |
| func NewNetworkV2Client() (*gophercloud.ServiceClient, error) { |
| ao, err := openstack.AuthOptionsFromEnv() |
| if err != nil { |
| return nil, err |
| } |
| |
| client, err := openstack.AuthenticatedClient(ao) |
| if err != nil { |
| return nil, err |
| } |
| |
| return openstack.NewNetworkV2(client, gophercloud.EndpointOpts{ |
| Region: os.Getenv("OS_REGION_NAME"), |
| }) |
| } |