in cloudstack/resource_cloudstack_host.go [274:316]
func resourceCloudStackHostDelete(d *schema.ResourceData, meta interface{}) error {
cs := meta.(*cloudstack.CloudStackClient)
if d.Get("prevent_destroy").(bool) {
log.Printf("[INFO] Skipping Host deletion: %s", d.Id())
return fmt.Errorf("host %s is marked to be protected from deletion", d.Id())
}
log.Printf("[INFO] Removing Host: %s", d.Id())
mm := cs.Host.NewPrepareHostForMaintenanceParams(d.Id())
_, err := cs.Host.PrepareHostForMaintenance(mm)
if err != nil {
return fmt.Errorf("error preparing Host for maintenance: %s", err)
}
timeout := time.After(time.Duration(d.Get("destroy_timeout").(int)) * time.Second)
tick := time.NewTicker(3 * time.Second)
for {
select {
case <-timeout:
return errors.New("timeout waiting for Host to enter Maintenance state")
case <-tick.C:
log.Printf("[DEBUG] Checking Host state: %s", d.Id())
err = resourceCloudStackHostRead(d, meta)
if err != nil {
return fmt.Errorf("error reading Host: %s", err)
}
if d.Get("resource_state").(string) == "Maintenance" || d.Get("resource_state").(string) == "Disconnected" {
log.Printf("[INFO] Deleting Host: %s", d.Id())
h := cs.Host.NewDeleteHostParams(d.Id())
_, err = cs.Host.DeleteHost(h)
if err != nil {
return fmt.Errorf("error deleting Host: %s", err)
}
return nil
}
}
}
}