| // 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"), | 
 | 	}) | 
 | } |