github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/agent/caasagent/caasagent.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasagent 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/apiserver/common" 10 "github.com/juju/juju/apiserver/common/cloudspec" 11 "github.com/juju/juju/apiserver/facade" 12 ) 13 14 type Facade struct { 15 auth facade.Authorizer 16 resources facade.Resources 17 cloudspec.CloudSpecAPI 18 *common.ModelWatcher 19 } 20 21 // NewStateFacade provides the signature required for facade registration. 22 func NewStateFacade(ctx facade.Context) (*Facade, error) { 23 authorizer := ctx.Auth() 24 if !authorizer.AuthMachineAgent() { 25 return nil, common.ErrPerm 26 } 27 28 resources := ctx.Resources() 29 model, err := ctx.State().Model() 30 if err != nil { 31 return nil, errors.Trace(err) 32 } 33 cloudSpecAPI := cloudspec.NewCloudSpec( 34 cloudspec.MakeCloudSpecGetterForModel(ctx.State()), 35 common.AuthFuncForTag(model.ModelTag()), 36 ) 37 return &Facade{ 38 CloudSpecAPI: cloudSpecAPI, 39 ModelWatcher: common.NewModelWatcher(model, resources, authorizer), 40 auth: authorizer, 41 resources: resources, 42 }, nil 43 }