Implement first function of cloud compute API
diff --git a/acceptance/openstack/compute/01-servers.go b/acceptance/openstack/compute/01-servers.go
new file mode 100644
index 0000000..9a729ff
--- /dev/null
+++ b/acceptance/openstack/compute/01-servers.go
@@ -0,0 +1,66 @@
+package main
+
+import (
+ "fmt"
+ "github.com/rackspace/gophercloud/openstack/compute/servers"
+ "github.com/rackspace/gophercloud/openstack/identity"
+ "github.com/rackspace/gophercloud/openstack/utils"
+)
+
+func main() {
+ ao, err := utils.AuthOptions()
+ if err != nil {
+ panic(err)
+ }
+
+ a, err := identity.Authenticate(ao)
+ if err != nil {
+ panic(err)
+ }
+
+ sc, err := identity.GetServiceCatalog(a)
+ if err != nil {
+ panic(err)
+ }
+
+ ep, err := findAnyComputeEndpoint(sc)
+ if err != nil {
+ panic(err)
+ }
+
+ client := servers.NewClient(ep, a, ao)
+
+ listResults, err := servers.List(client)
+ if err != nil {
+ panic(err)
+ }
+
+ svrs, err := servers.GetServers(listResults)
+ if err != nil {
+ panic(err)
+ }
+
+ for _, s := range svrs {
+ fmt.Printf("ID(%s)\n", s.Id)
+ fmt.Printf(" Name(%s)\n", s.Name)
+ fmt.Printf(" IPv4(%s)\n IPv6(%s)\n", s.AccessIPv4, s.AccessIPv6)
+ }
+ fmt.Printf("--------\n%d servers listed.\n", len(svrs))
+}
+
+
+func findAnyComputeEndpoint(sc *identity.ServiceCatalog) (string, error) {
+ ces, err := sc.CatalogEntries()
+ if err != nil {
+ return "", err
+ }
+
+ for _, ce := range ces {
+ if ce.Type == "compute" {
+ return ce.Endpoints[0].PublicURL, nil
+ }
+ }
+
+ return "", fmt.Errorf("Compute endpoint not found.")
+}
+