From e130d95518bd1be7a1c24438bec60643119e5754 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 17 Jun 2017 17:06:29 +0200 Subject: vm/gce: accept un-tar-ed image vm/gce differs from other VM types in that it accepts image in a weird, GCE-specific format (namely, image named disk.raw is put into .tar.gz file). This makes it impossible to write generic code that creates images for any VM types. Make vm/gce accept just image like e.g. vm/qemu and handle own specifics internally. --- pkg/gcs/gcs.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'pkg/gcs') diff --git a/pkg/gcs/gcs.go b/pkg/gcs/gcs.go index 0121d2aeb..97883256a 100644 --- a/pkg/gcs/gcs.go +++ b/pkg/gcs/gcs.go @@ -80,25 +80,35 @@ func (client *Client) Read(gcsFile string) (*File, error) { } func (client *Client) UploadFile(localFile, gcsFile string) error { - bucket, filename, err := split(gcsFile) + local, err := os.Open(localFile) if err != nil { return err } - local, err := os.Open(localFile) + defer local.Close() + + w, err := client.FileWriter(gcsFile) if err != nil { return err } - defer local.Close() - bkt := client.client.Bucket(bucket) - f := bkt.Object(filename) - w := f.NewWriter(client.ctx) defer w.Close() + if _, err := io.Copy(w, local); err != nil { return err } return nil } +func (client *Client) FileWriter(gcsFile string) (io.WriteCloser, error) { + bucket, filename, err := split(gcsFile) + if err != nil { + return nil, err + } + bkt := client.client.Bucket(bucket) + f := bkt.Object(filename) + w := f.NewWriter(client.ctx) + return w, nil +} + func split(file string) (bucket, filename string, err error) { pos := strings.IndexByte(file, '/') if pos == -1 { -- cgit mrf-deployment