github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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/mongo" 12 "github.com/juju/juju/state/backups" 13 ) 14 15 var waitUntilReady = replicaset.WaitUntilReady 16 17 // Create is the API method that requests juju to create a new backup 18 // of its state. It returns the metadata for that backup. 19 func (a *API) Create(args params.BackupsCreateArgs) (p params.BackupsMetadataResult, err error) { 20 backupsMethods, closer := newBackups(a.backend) 21 defer closer.Close() 22 23 session := a.backend.MongoSession().Copy() 24 defer session.Close() 25 26 // Don't go if HA isn't ready. 27 err = waitUntilReady(session, 60) 28 if err != nil { 29 return p, errors.Annotatef(err, "HA not ready; try again later") 30 } 31 32 mgoInfo := a.backend.MongoConnectionInfo() 33 v, err := a.backend.MongoVersion() 34 if err != nil { 35 return p, errors.Annotatef(err, "discovering mongo version") 36 } 37 mongoVersion, err := mongo.NewVersion(v) 38 if err != nil { 39 return p, errors.Trace(err) 40 } 41 dbInfo, err := backups.NewDBInfo(mgoInfo, session, mongoVersion) 42 if err != nil { 43 return p, errors.Trace(err) 44 } 45 mSeries, err := a.backend.MachineSeries(a.machineID) 46 if err != nil { 47 return p, errors.Trace(err) 48 } 49 50 meta, err := backups.NewMetadataState(a.backend, a.machineID, mSeries) 51 if err != nil { 52 return p, errors.Trace(err) 53 } 54 meta.Notes = args.Notes 55 56 err = backupsMethods.Create(meta, a.paths, dbInfo) 57 if err != nil { 58 return p, errors.Trace(err) 59 } 60 61 return ResultFromMetadata(meta), nil 62 }