Change HTTP methods for OpenStack Compute
diff --git a/openstack/compute/v2/servers/requests.go b/openstack/compute/v2/servers/requests.go
index c862b4d..e0950e4 100644
--- a/openstack/compute/v2/servers/requests.go
+++ b/openstack/compute/v2/servers/requests.go
@@ -216,29 +216,22 @@
 		return res
 	}
 
-	_, res.Err = client.Request("POST", listURL(client), gophercloud.RequestOpts{
-		JSONResponse: &res.Body,
-		JSONBody:     reqBody,
-		OkCodes:      []int{202},
-	})
+	_, res.Err = client.Post(listURL(client), reqBody, &res.Body, nil)
 	return res
 }
 
 // Delete requests that a server previously provisioned be removed from your account.
 func Delete(client *gophercloud.ServiceClient, id string) DeleteResult {
 	var res DeleteResult
-	_, res.Err = client.Request("DELETE", deleteURL(client, id), gophercloud.RequestOpts{
-		OkCodes: []int{204},
-	})
+	_, res.Err = client.Delete(deleteURL(client, id), nil)
 	return res
 }
 
 // Get requests details on a single server, by ID.
 func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var result GetResult
-	_, result.Err = client.Request("GET", getURL(client, id), gophercloud.RequestOpts{
-		JSONResponse: &result.Body,
-		OkCodes:      []int{200, 203},
+	_, result.Err = client.Get(getURL(client, id), &result.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200, 203},
 	})
 	return result
 }
@@ -280,10 +273,9 @@
 // Update requests that various attributes of the indicated server be changed.
 func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) UpdateResult {
 	var result UpdateResult
-	_, result.Err = client.Request("PUT", updateURL(client, id), gophercloud.RequestOpts{
-		JSONResponse: &result.Body,
-		JSONBody:     opts.ToServerUpdateMap(),
-		OkCodes:      []int{200},
+	reqBody := opts.ToServerUpdateMap()
+	_, result.Err = client.Put(updateURL(client, id), reqBody, &result.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200},
 	})
 	return result
 }
@@ -299,12 +291,7 @@
 	req.ChangePassword.AdminPass = newPassword
 
 	var res ActionResult
-
-	_, res.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONBody: req,
-		OkCodes:  []int{202},
-	})
-
+	_, res.Err = client.Post(actionURL(client, id), req, nil, nil)
 	return res
 }
 
@@ -368,15 +355,13 @@
 		return res
 	}
 
-	_, res.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONBody: struct {
-			C map[string]string `json:"reboot"`
-		}{
-			map[string]string{"type": string(how)},
-		},
-		OkCodes: []int{202},
-	})
+	reqBody := struct {
+		C map[string]string `json:"reboot"`
+	}{
+		map[string]string{"type": string(how)},
+	}
 
+	_, res.Err = client.Post(actionURL(client, id), reqBody, nil, nil)
 	return res
 }
 
@@ -469,12 +454,7 @@
 		return result
 	}
 
-	_, result.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONBody:     &reqBody,
-		JSONResponse: &result.Body,
-		OkCodes:      []int{202},
-	})
-
+	_, result.Err = client.Post(actionURL(client, id), reqBody, &result.Body, nil)
 	return result
 }
 
@@ -515,11 +495,7 @@
 		return res
 	}
 
-	_, res.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONBody: reqBody,
-		OkCodes:  []int{202},
-	})
-
+	_, res.Err = client.Post(actionURL(client, id), reqBody, nil, nil)
 	return res
 }
 
@@ -528,11 +504,10 @@
 func ConfirmResize(client *gophercloud.ServiceClient, id string) ActionResult {
 	var res ActionResult
 
-	_, res.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONBody: map[string]interface{}{"confirmResize": nil},
-		OkCodes:  []int{204},
+	reqBody := map[string]interface{}{"confirmResize": nil}
+	_, res.Err = client.Post(actionURL(client, id), reqBody, nil, &gophercloud.RequestOpts{
+		OkCodes: []int{201, 202, 204},
 	})
-
 	return res
 }
 
@@ -540,12 +515,8 @@
 // See Resize() for more details.
 func RevertResize(client *gophercloud.ServiceClient, id string) ActionResult {
 	var res ActionResult
-
-	_, res.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONBody: map[string]interface{}{"revertResize": nil},
-		OkCodes:  []int{202},
-	})
-
+	reqBody := map[string]interface{}{"revertResize": nil}
+	_, res.Err = client.Post(actionURL(client, id), reqBody, nil, nil)
 	return res
 }
 
@@ -587,10 +558,8 @@
 		return result
 	}
 
-	_, result.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{
-		JSONResponse: &result.Body,
-		JSONBody:     &reqBody,
-		OkCodes:      []int{200},
+	_, result.Err = client.Post(actionURL(client, id), reqBody, &result.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200},
 	})
 
 	return result
@@ -626,10 +595,8 @@
 		res.Err = err
 		return res
 	}
-	_, res.Err = client.Request("PUT", metadataURL(client, id), gophercloud.RequestOpts{
-		JSONBody:     metadata,
-		JSONResponse: &res.Body,
-		OkCodes:      []int{200},
+	_, res.Err = client.Put(metadataURL(client, id), metadata, &res.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200},
 	})
 	return res
 }
@@ -637,9 +604,7 @@
 // Metadata requests all the metadata for the given server ID.
 func Metadata(client *gophercloud.ServiceClient, id string) GetMetadataResult {
 	var res GetMetadataResult
-	_, res.Err = client.Request("GET", metadataURL(client, id), gophercloud.RequestOpts{
-		JSONResponse: &res.Body,
-	})
+	_, res.Err = client.Get(metadataURL(client, id), &res.Body, nil)
 	return res
 }
 
@@ -659,10 +624,8 @@
 		res.Err = err
 		return res
 	}
-	_, res.Err = client.Request("POST", metadataURL(client, id), gophercloud.RequestOpts{
-		JSONBody:     metadata,
-		JSONResponse: &res.Body,
-		OkCodes:      []int{200},
+	_, res.Err = client.Post(metadataURL(client, id), metadata, &res.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200},
 	})
 	return res
 }
@@ -698,10 +661,8 @@
 		return res
 	}
 
-	_, res.Err = client.Request("PUT", metadatumURL(client, id, key), gophercloud.RequestOpts{
-		JSONBody:     metadatum,
-		JSONResponse: &res.Body,
-		OkCodes:      []int{200},
+	_, res.Err = client.Put(metadatumURL(client, id, key), metadatum, &res.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200},
 	})
 	return res
 }
@@ -718,7 +679,7 @@
 // DeleteMetadatum will delete the key-value pair with the given key for the given server ID.
 func DeleteMetadatum(client *gophercloud.ServiceClient, id, key string) DeleteMetadatumResult {
 	var res DeleteMetadatumResult
-	_, res.Err = client.Request("DELETE", metadatumURL(client, id, key), gophercloud.RequestOpts{
+	_, res.Err = client.Delete(metadatumURL(client, id, key), &gophercloud.RequestOpts{
 		JSONResponse: &res.Body,
 	})
 	return res