Handle denial to unassign floating IP from droplet

This commit is contained in:
Arve Knudsen 2017-11-13 18:55:47 +01:00
parent 12bde9ded1
commit 82b0996791
1 changed files with 14 additions and 10 deletions

View File

@ -99,7 +99,7 @@ func resourceDigitalOceanFloatingIpUpdate(d *schema.ResourceData, meta interface
action, _, err := client.FloatingIPActions.Unassign(context.Background(), d.Id()) action, _, err := client.FloatingIPActions.Unassign(context.Background(), d.Id())
if err != nil { if err != nil {
return fmt.Errorf( return fmt.Errorf(
"Error Unassigning FloatingIP (%s): %s", d.Id(), err) "Error unassigning FloatingIP (%s): %s", d.Id(), err)
} }
_, unassignedErr := waitForFloatingIPReady(d, "completed", []string{"new", "in-progress"}, "status", meta, action.ID) _, unassignedErr := waitForFloatingIPReady(d, "completed", []string{"new", "in-progress"}, "status", meta, action.ID)
@ -141,16 +141,20 @@ func resourceDigitalOceanFloatingIpDelete(d *schema.ResourceData, meta interface
if _, ok := d.GetOk("droplet_id"); ok { if _, ok := d.GetOk("droplet_id"); ok {
log.Printf("[INFO] Unassigning the Floating IP from the Droplet") log.Printf("[INFO] Unassigning the Floating IP from the Droplet")
action, _, err := client.FloatingIPActions.Unassign(context.Background(), d.Id()) action, resp, err := client.FloatingIPActions.Unassign(context.Background(), d.Id())
if err != nil { if resp.StatusCode != 422 {
return fmt.Errorf( if err != nil {
"Error Unassigning FloatingIP (%s) from the droplet: %s", d.Id(), err) return fmt.Errorf(
} "Error unassigning FloatingIP (%s) from the droplet: %s", d.Id(), err)
}
_, unassignedErr := waitForFloatingIPReady(d, "completed", []string{"new", "in-progress"}, "status", meta, action.ID) _, unassignedErr := waitForFloatingIPReady(d, "completed", []string{"new", "in-progress"}, "status", meta, action.ID)
if unassignedErr != nil { if unassignedErr != nil {
return fmt.Errorf( return fmt.Errorf(
"Error waiting for FloatingIP (%s) to be unassigned: %s", d.Id(), unassignedErr) "Error waiting for FloatingIP (%s) to be unassigned: %s", d.Id(), unassignedErr)
}
} else {
log.Printf("[DEBUG] Couldn't unassign FloatingIP (%s) from droplet, possibly out of sync: %s", d.Id(), err)
} }
} }