diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-06-17 17:06:29 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-06-17 17:06:29 +0200 |
| commit | e130d95518bd1be7a1c24438bec60643119e5754 (patch) | |
| tree | e4e739d1a90064156b895a14f089a3d4a7393ea8 /pkg/gcs | |
| parent | de258e6d7ebf13facf7df8e92eb1a9bdf3391808 (diff) | |
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.
Diffstat (limited to 'pkg/gcs')
| -rw-r--r-- | pkg/gcs/gcs.go | 22 |
1 files changed, 16 insertions, 6 deletions
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 { |
