github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/api/backups/upload.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package backups 5 6 import ( 7 "io" 8 "net/http" 9 "time" 10 11 "github.com/juju/errors" 12 13 apihttp "github.com/juju/juju/apiserver/http" 14 "github.com/juju/juju/apiserver/params" 15 ) 16 17 // Upload sends the backup archive to remote storage. 18 func (c *Client) Upload(archive io.Reader, meta params.BackupsMetadataResult) (string, error) { 19 // Empty out some of the metadata. 20 meta.ID = "" 21 meta.Stored = time.Time{} 22 23 // Send the request. 24 _, resp, err := c.http.SendHTTPRequestReader("backups", archive, &meta, "juju-backup.tar.gz") 25 if err != nil { 26 return "", errors.Annotate(err, "while sending HTTP request") 27 } 28 29 // Handle the response. 30 if resp.StatusCode == http.StatusOK { 31 var result params.BackupsMetadataResult 32 if err := apihttp.ExtractJSONResult(resp, &result); err != nil { 33 return "", errors.Annotate(err, "while extracting result") 34 } 35 return result.ID, nil 36 } else { 37 failure, err := apihttp.ExtractAPIError(resp) 38 if err != nil { 39 return "", errors.Annotate(err, "while extracting failure") 40 } 41 return "", errors.Trace(failure) 42 } 43 }