rackspace/gophercloud — pull request #209 by smashwilson (2014-09-29 12:55:41+00:00)
Title: [wip] Provide structs for server creation and update

Rather than accepting any `map[string]interface{}`, provide structs that users can populate and supply to `servers.Create` and `servers.Update`, with clear documentation on what's required and what's optional.

To support the eventual addition of extensions, I'm interposing an interface type between the struct and the call. That should let an extension provide a different struct (possibly one that embeds the original) and a different translation into a request body (possibly one that delegates to the original method). The naming pattern I'm using is:

```go
type CreateOptsLike interface {
ToServerCreateReqData() map[string]interface{}
}

type CreateOpts struct {
// Concrete parameters for the base Create call
}

func Create(client *gophercloud.ServiceClient, opts CreateOptsLike) {
// ...
}
```

cc @jamiehannaford