boot from volume base code
diff --git a/openstack/compute/v2/extensions/bootfromvolume/requests.go b/openstack/compute/v2/extensions/bootfromvolume/requests.go
new file mode 100644
index 0000000..b0cf61e
--- /dev/null
+++ b/openstack/compute/v2/extensions/bootfromvolume/requests.go
@@ -0,0 +1,31 @@
+package bootfromvolume
+
+import (
+  "errors"
+
+  "github.com/rackspace/gophercloud/openstack/compute/v2/servers"
+)
+
+type CreateOptsExt struct {
+	servers.CreateOptsBuilder
+	BlockDeviceMapping BlockDeviceMapping
+}
+
+// ToServerCreateMap adds the block device mapping option to the base server
+// creation options.
+func (opts CreateOptsExt) ToServerCreateMap() (map[string]interface{}, error) {
+  if opts.SourceType != "volume" && opts.SourceType != "image" && opts.SourceType != "snapshot" {
+    return nil, errors.New("SourceType must be one of: volume, image, snapshot.")
+  }
+
+  if opts.UUID == "" {
+    return nil, errors.New("Required field UUID not set.")
+  }
+
+  base := opts.CreateOptsBuilder.ToServerCreateMap()
+
+  serverMap := base["server"].(map[string]interface{})
+  serverMap["block_device_mapping_v2"] = opts.BlockDeviceMapping
+
+  return base
+}
diff --git a/openstack/compute/v2/extensions/bootfromvolume/requests_test.go b/openstack/compute/v2/extensions/bootfromvolume/requests_test.go
new file mode 100644
index 0000000..a564982
--- /dev/null
+++ b/openstack/compute/v2/extensions/bootfromvolume/requests_test.go
@@ -0,0 +1 @@
+package bootfromvolume
diff --git a/openstack/compute/v2/extensions/bootfromvolume/results.go b/openstack/compute/v2/extensions/bootfromvolume/results.go
new file mode 100644
index 0000000..ef093e8
--- /dev/null
+++ b/openstack/compute/v2/extensions/bootfromvolume/results.go
@@ -0,0 +1,10 @@
+package bootfromvolume
+
+type BlockDeviceMapping struct {
+  BootIndex           int    `json:"boot_index"`
+  DeleteOnTermination bool   `json:"delete_on_termination"`
+  DestinationType     string `json:"destination_type"`
+  SourceType          string `json:"source_type"`
+  UUID                string `json:"uuid"`
+  VolumeSize          int    `json:"volume_size"`
+}