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  }