github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/apiserver/backups/create.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 "github.com/juju/errors" 8 "github.com/juju/replicaset" 9 10 "github.com/juju/juju/apiserver/params" 11 "github.com/juju/juju/state/backups" 12 ) 13 14 var waitUntilReady = replicaset.WaitUntilReady 15 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.st) 20 defer closer.Close() 21 22 session := a.st.MongoSession().Copy() 23 defer session.Close() 24 25 // Don't go if HA isn't ready. 26 err = waitUntilReady(session, 60) 27 if err != nil { 28 return p, errors.Annotatef(err, "HA not ready; try again later") 29 } 30 31 mgoInfo := a.st.MongoConnectionInfo() 32 dbInfo, err := backups.NewDBInfo(mgoInfo, session) 33 if err != nil { 34 return p, errors.Trace(err) 35 } 36 37 meta, err := backups.NewMetadataState(a.st, a.machineID) 38 if err != nil { 39 return p, errors.Trace(err) 40 } 41 meta.Notes = args.Notes 42 43 err = backupsMethods.Create(meta, a.paths, dbInfo) 44 if err != nil { 45 return p, errors.Trace(err) 46 } 47 48 return ResultFromMetadata(meta), nil 49 }