Implement first function of cloud compute API
diff --git a/openstack/compute/servers/servers.go b/openstack/compute/servers/servers.go
new file mode 100644
index 0000000..7061993
--- /dev/null
+++ b/openstack/compute/servers/servers.go
@@ -0,0 +1,77 @@
+package servers
+
+import (
+	"github.com/mitchellh/mapstructure"
+	"fmt"
+)
+
+// ErrNotImplemented indicates a failure to discover a feature of the response from the API.
+// E.g., a missing server field, a missing extension, etc.
+var ErrNotImplemented = fmt.Errorf("Compute Servers feature not implemented.")
+
+// Server exposes only the standard OpenStack fields corresponding to a given server on the user's account.
+//
+// Id uniquely identifies this server amongst all other servers, including those not accessible to the current tenant.
+//
+// TenantId identifies the tenant owning this server resource.
+//
+// UserId uniquely identifies the user account owning the tenant.
+//
+// Name contains the human-readable name for the server.
+//
+// Updated and Created contain ISO-8601 timestamps of when the state of the server last changed, and when it was created.
+//
+// Status contains the current operational status of the server, such as IN_PROGRESS or ACTIVE.
+//
+// Progress ranges from 0..100.  A request made against the server completes only once Progress reaches 100.
+//
+// AccessIPv4 and AccessIPv6 contain the IP addresses of the server, suitable for remote access for administration.
+//
+// Image refers to a JSON object, which itself indicates the OS image used to deploy the server.
+//
+// Flavor refers to a JSON object, which itself indicates the hardware configuration of the deployed server.
+//
+// Addresses includes a list of all IP addresses assigned to the server, keyed by pool.
+//
+// Metadata includes a list of all user-specified key-value pairs attached to the server.
+//
+// Links includes HTTP references to the itself, useful for passing along to other APIs that might want a server reference.
+type Server struct {
+	Id string
+	TenantId string `mapstructure:tenant_id`
+	UserId string `mapstructure:user_id`
+	Name string
+	Updated string
+	Created string
+	HostId string
+	Status string
+	Progress int
+	AccessIPv4 string
+	AccessIPv6 string
+	Image map[string]interface{}
+	Flavor map[string]interface{}
+	Addresses map[string]interface{}
+	Metadata map[string]interface{}
+	Links []interface{}
+}
+
+// GetServers interprets the result of a List() call, producing a slice of Server entities.
+func GetServers(lr ListResult) ([]Server, error) {
+	sa, ok := lr["servers"]
+	if !ok {
+		return nil, ErrNotImplemented
+	}
+	serversArray := sa.([]interface{})
+
+	servers := make([]Server, len(serversArray))
+	for i, so := range serversArray {
+		serverObj := so.(map[string]interface{})
+		err := mapstructure.Decode(serverObj, &servers[i])
+		if err != nil {
+			return servers, err
+		}
+	}
+
+	return servers, nil
+}
+