From 392b153595f220abef45da262ec4ffab4fcb969a Mon Sep 17 00:00:00 2001 From: Flavio Castelli Date: Sat, 27 May 2017 00:08:27 +0200 Subject: DRY code Provide a generic function to return a copier to be used with `img.Import`. This reduces code duplication. Signed-off-by: Flavio Castelli --- libvirt/utils_volume.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libvirt/utils_volume.go') diff --git a/libvirt/utils_volume.go b/libvirt/utils_volume.go index 594d1f68..67418985 100644 --- a/libvirt/utils_volume.go +++ b/libvirt/utils_volume.go @@ -9,6 +9,8 @@ import ( "os" "strconv" "strings" + + libvirt "github.com/dmacvicar/libvirt-go" ) // network transparent image @@ -131,3 +133,23 @@ func newImage(source string) (image, error) { return nil, fmt.Errorf("Don't know how to read from '%s': %s", url.String(), err) } } + +func newCopier(virConn *libvirt.VirConnection, volume libvirt.VirStorageVol, size uint64) func(src io.Reader) error { + copier := func(src io.Reader) error { + stream, err := libvirt.NewVirStream(virConn, 0) + if err != nil { + return err + } + defer stream.Close() + + volume.Upload(stream, 0, size, 0) + + n, err := io.Copy(stream, src) + if err != nil { + return err + } + log.Printf("%d bytes uploaded\n", n) + return nil + } + return copier +} -- cgit v1.2.3