github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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 "github.com/juju/juju/apiserver/httpattachment" 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.ReadSeeker, meta params.BackupsMetadataResult) (string, error) { 19 // Empty out some of the metadata. 20 meta.ID = "" 21 meta.Stored = time.Time{} 22 23 req, err := http.NewRequest("PUT", "/backups", nil) 24 if err != nil { 25 return "", errors.Trace(err) 26 } 27 body, contentType, err := httpattachment.NewBody(archive, meta, "juju-backup.tar.gz") 28 if err != nil { 29 return "", errors.Annotatef(err, "cannot create multipart body") 30 } 31 req.Header.Set("Content-Type", contentType) 32 var result params.BackupsUploadResult 33 if err := c.client.Do(req, body, &result); err != nil { 34 return "", errors.Trace(err) 35 } 36 return result.ID, nil 37 }