github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/controller/migrationmaster/shim.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package migrationmaster 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/version" 9 "gopkg.in/juju/names.v2" 10 11 "github.com/juju/juju/apiserver/facade" 12 "github.com/juju/juju/migration" 13 "github.com/juju/juju/state" 14 ) 15 16 // NewFacade exists to provide the required signature for API 17 // registration, converting st to backend. 18 func NewFacade(ctx facade.Context) (*API, error) { 19 controllerState := ctx.StatePool().SystemState() 20 precheckBackend, err := migration.PrecheckShim(ctx.State(), controllerState) 21 if err != nil { 22 return nil, errors.Annotate(err, "creating precheck backend") 23 } 24 return NewAPI( 25 &backendShim{ctx.State()}, 26 precheckBackend, 27 migration.PoolShim(ctx.StatePool()), 28 ctx.Resources(), 29 ctx.Auth(), 30 ctx.Presence(), 31 ) 32 } 33 34 // backendShim wraps a *state.State to implement Backend. It is 35 // untested, but is simple enough to be verified by inspection. 36 type backendShim struct { 37 *state.State 38 } 39 40 // ModelName implements Backend. 41 func (s *backendShim) ModelName() (string, error) { 42 model, err := s.Model() 43 if err != nil { 44 return "", errors.Trace(err) 45 } 46 return model.Name(), nil 47 } 48 49 // ModelOwner implements Backend. 50 func (s *backendShim) ModelOwner() (names.UserTag, error) { 51 model, err := s.Model() 52 if err != nil { 53 return names.UserTag{}, errors.Trace(err) 54 } 55 return model.Owner(), nil 56 } 57 58 // AgentVersion implements Backend. 59 func (s *backendShim) AgentVersion() (version.Number, error) { 60 m, err := s.Model() 61 if err != nil { 62 return version.Zero, errors.Trace(err) 63 } 64 65 cfg, err := m.ModelConfig() 66 if err != nil { 67 return version.Zero, errors.Trace(err) 68 } 69 vers, ok := cfg.AgentVersion() 70 if !ok { 71 return version.Zero, errors.New("no agent version") 72 } 73 return vers, nil 74 }