server resizing

This commit is contained in:
Jon Perritt 2015-01-05 10:05:25 -07:00
parent 0bb0dad58c
commit f17649e9dc
1 changed files with 54 additions and 3 deletions

View File

@ -214,6 +214,11 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
}) })
d.Set("metadata", server.Metadata) d.Set("metadata", server.Metadata)
newFlavor, ok := server.Flavor["id"].(string)
if !ok {
return fmt.Errorf("Error setting OpenStack server's flavor: %v", newFlavor)
}
d.Set("flavor_ref", newFlavor)
return nil return nil
} }
@ -258,6 +263,54 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
} }
} }
if d.HasChange("flavor_ref") {
resizeOpts := &servers.ResizeOpts{
FlavorRef: d.Get("flavor_ref").(string),
}
err := servers.Resize(osClient, d.Id(), resizeOpts).ExtractErr()
if err != nil {
return fmt.Errorf("Error resizing OpenStack server: %s", err)
}
// Wait for the instance to finish resizing.
log.Printf("[DEBUG] Waiting for instance (%s) to finish resizing", d.Id())
stateConf := &resource.StateChangeConf{
Pending: []string{"RESIZE"},
Target: "VERIFY_RESIZE",
Refresh: ServerStateRefreshFunc(osClient, d.Id()),
Timeout: 3 * time.Minute,
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
}
_, err = stateConf.WaitForState()
if err != nil {
return fmt.Errorf("Error waiting for instance (%s) to resize: %s", d.Id(), err)
}
// Confirm resize.
log.Printf("[DEBUG] Confirming resize")
err = servers.ConfirmResize(osClient, d.Id()).ExtractErr()
if err != nil {
return fmt.Errorf("Error confirming resize of OpenStack server: %s", err)
}
stateConf = &resource.StateChangeConf{
Pending: []string{"VERIFY_RESIZE"},
Target: "ACTIVE",
Refresh: ServerStateRefreshFunc(osClient, d.Id()),
Timeout: 3 * time.Minute,
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
}
_, err = stateConf.WaitForState()
if err != nil {
return fmt.Errorf("Error waiting for instance (%s) to confirm resize: %s", d.Id(), err)
}
}
return resourceComputeInstanceRead(d, meta) return resourceComputeInstanceRead(d, meta)
} }
@ -271,9 +324,7 @@ func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) err
} }
// Wait for the instance to delete before moving on. // Wait for the instance to delete before moving on.
log.Printf( log.Printf("[DEBUG] Waiting for instance (%s) to delete", d.Id())
"[DEBUG] Waiting for instance (%s) to delete",
d.Id())
stateConf := &resource.StateChangeConf{ stateConf := &resource.StateChangeConf{
Target: "", Target: "",