Add resize server action.
This looks like it should do the trick. Intermittently, however, some
servers created by the acceptance test will end up in an error state.
It is not consistently reproducible. When it does work, however, it
works as expected. I'm not sure why the behavior is variable.
diff --git a/servers.go b/servers.go
index ee38e9f..78ad350 100644
--- a/servers.go
+++ b/servers.go
@@ -131,6 +131,62 @@
return err
}
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) ResizeServer(id, newName, newFlavor, newDiskConfig string) error {
+ err := gsp.context.WithReauth(gsp.access, func() error {
+ url := fmt.Sprintf("%s/servers/%s/action", gsp.endpoint, id)
+ rr := ResizeRequest{
+ Name: newName,
+ FlavorRef: newFlavor,
+ DiskConfig: newDiskConfig,
+ }
+ return perigee.Post(url, perigee.Options{
+ ReqBody: &struct {
+ Resize ResizeRequest `json:"resize"`
+ }{rr},
+ OkCodes: []int{202},
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ })
+ })
+ return err
+}
+
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) RevertResize(id string) error {
+ err := gsp.context.WithReauth(gsp.access, func() error {
+ url := fmt.Sprintf("%s/servers/%s/action", gsp.endpoint, id)
+ return perigee.Post(url, perigee.Options{
+ ReqBody: &struct {
+ RevertResize *int `json:"revertResize"`
+ }{nil},
+ OkCodes: []int{202},
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ })
+ })
+ return err
+}
+
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) ConfirmResize(id string) error {
+ err := gsp.context.WithReauth(gsp.access, func() error {
+ url := fmt.Sprintf("%s/servers/%s/action", gsp.endpoint, id)
+ return perigee.Post(url, perigee.Options{
+ ReqBody: &struct {
+ ConfirmResize *int `json:"confirmResize"`
+ }{nil},
+ OkCodes: []int{204},
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ })
+ })
+ return err
+}
+
// RaxBandwidth provides measurement of server bandwidth consumed over a given audit interval.
type RaxBandwidth struct {
AuditPeriodEnd string `json:"audit_period_end"`
@@ -313,3 +369,12 @@
Links []Link `json:"links,omitempty"`
OsDcfDiskConfig string `json:"OS-DCF:diskConfig,omitempty"`
}
+
+// ResizeRequest structures are used internally to encode to JSON the parameters required to resize a server instance.
+// Client applications will not use this structure (no API accepts an instance of this structure).
+// See the Region method ResizeServer() for more details on how to resize a server.
+type ResizeRequest struct {
+ Name string `json:"name,omitempty"`
+ FlavorRef string `json:"flavorRef"`
+ DiskConfig string `json:"OS-DCF:diskConfig,omitempty"`
+}