diff options
author | Duncan Mac-Vicar P <dmacvicar@suse.de> | 2016-05-06 00:36:42 +0200 |
---|---|---|
committer | Duncan Mac-Vicar P <dmacvicar@suse.de> | 2016-05-06 00:36:42 +0200 |
commit | 61227d660a95759bb80aa33dfe8fd1893b49d6f1 (patch) | |
tree | 318728122d2ae34850c376ae24b6f4f12c952765 /libvirt | |
parent | bcc2ddfc005964cb0d75b24a12c598436afe993b (diff) | |
download | terraform-provider-libvirt-61227d660a95759bb80aa33dfe8fd1893b49d6f1.tar terraform-provider-libvirt-61227d660a95759bb80aa33dfe8fd1893b49d6f1.tar.gz |
wait for refresh to happen as there may be async jobs running on the pool
Diffstat (limited to 'libvirt')
-rw-r--r-- | libvirt/resource_libvirt_volume.go | 7 | ||||
-rw-r--r-- | libvirt/utils.go | 17 |
2 files changed, 20 insertions, 4 deletions
diff --git a/libvirt/resource_libvirt_volume.go b/libvirt/resource_libvirt_volume.go index cd0e76a8..ce4bb5ef 100644 --- a/libvirt/resource_libvirt_volume.go +++ b/libvirt/resource_libvirt_volume.go @@ -241,10 +241,9 @@ func resourceLibvirtVolumeDelete(d *schema.ResourceData, meta interface{}) error } defer volPool.Free() - err = volPool.Refresh(0) - if err != nil { - return fmt.Errorf("Error refreshing pool for volume: %s", err) - } + WaitForSuccess("Error refreshing pool for volume", func() error { + return volPool.Refresh(0) + }) // Workaround for redhat#1293804 // https://bugzilla.redhat.com/show_bug.cgi?id=1293804#c12 diff --git a/libvirt/utils.go b/libvirt/utils.go index deec2900..3dc8e17e 100644 --- a/libvirt/utils.go +++ b/libvirt/utils.go @@ -2,6 +2,7 @@ package libvirt import ( "fmt" + "time" ) var diskLetters []rune = []rune("abcdefghijklmnopqrstuvwxyz") @@ -18,3 +19,19 @@ func DiskLetterForIndex(i int) string { return fmt.Sprintf("%s%c", DiskLetterForIndex(q-1), letter) } + +// wait for success and timeout after 5 minutes. +func WaitForSuccess(errorMessage string, f func() error) error { + start := time.Now() + for { + err := f() + if err == nil { + return nil + } + + time.Sleep(1 * time.Second) + if time.Since(start) > 5*time.Minute { + return fmt.Errorf("%s: %s", errorMessage, err) + } + } +} |