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  }