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  }