1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
8
"github.com/juju/replicaset"
10
"github.com/juju/juju/apiserver/params"
11
"github.com/juju/juju/state/backups"
14
var waitUntilReady = replicaset.WaitUntilReady
16
// Create is the API method that requests juju to create a new backup
17
// of its state. It returns the metadata for that backup.
18
func (a *API) Create(args params.BackupsCreateArgs) (p params.BackupsMetadataResult, err error) {
19
backupsMethods, closer := newBackups(a.backend)
22
session := a.backend.MongoSession().Copy()
25
// Don't go if HA isn't ready.
26
err = waitUntilReady(session, 60)
28
return p, errors.Annotatef(err, "HA not ready; try again later")
31
mgoInfo := a.backend.MongoConnectionInfo()
32
dbInfo, err := backups.NewDBInfo(mgoInfo, session)
34
return p, errors.Trace(err)
36
mSeries, err := a.backend.MachineSeries(a.machineID)
38
return p, errors.Trace(err)
41
meta, err := backups.NewMetadataState(a.backend, a.machineID, mSeries)
43
return p, errors.Trace(err)
45
meta.Notes = args.Notes
47
err = backupsMethods.Create(meta, a.paths, dbInfo)
49
return p, errors.Trace(err)
52
return ResultFromMetadata(meta), nil