github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/apiserver/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/juju/apiserver/facade"
     9  	"github.com/juju/juju/migration"
    10  	"github.com/juju/juju/state"
    11  	"github.com/juju/version"
    12  	"gopkg.in/juju/names.v2"
    13  )
    14  
    15  // newAPIForRegistration exists to provide the required signature for
    16  // RegisterStandardFacade, converting st to backend.
    17  func newAPIForRegistration(
    18  	st *state.State,
    19  	resources facade.Resources,
    20  	authorizer facade.Authorizer,
    21  ) (*API, error) {
    22  	return NewAPI(&backendShim{st}, migration.PrecheckShim(st), resources, authorizer)
    23  }
    24  
    25  // backendShim wraps a *state.State to implement Backend. It is
    26  // untested, but is simple enough to be verified by inspection.
    27  type backendShim struct {
    28  	*state.State
    29  }
    30  
    31  // ModelName implements Backend.
    32  func (s *backendShim) ModelName() (string, error) {
    33  	model, err := s.Model()
    34  	if err != nil {
    35  		return "", errors.Trace(err)
    36  	}
    37  	return model.Name(), nil
    38  }
    39  
    40  // ModelOwner implements Backend.
    41  func (s *backendShim) ModelOwner() (names.UserTag, error) {
    42  	model, err := s.Model()
    43  	if err != nil {
    44  		return names.UserTag{}, errors.Trace(err)
    45  	}
    46  	return model.Owner(), nil
    47  }
    48  
    49  // AgentVersion implements Backend.
    50  func (s *backendShim) AgentVersion() (version.Number, error) {
    51  	cfg, err := s.ModelConfig()
    52  	if err != nil {
    53  		return version.Zero, errors.Trace(err)
    54  	}
    55  	vers, ok := cfg.AgentVersion()
    56  	if !ok {
    57  		return version.Zero, errors.New("no agent version")
    58  	}
    59  	return vers, nil
    60  }