github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/modelmanager/state.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package modelmanager
     5  
     6  import (
     7  	"github.com/juju/names"
     8  
     9  	"github.com/juju/juju/apiserver/common"
    10  	"github.com/juju/juju/environs/config"
    11  	"github.com/juju/juju/state"
    12  	"github.com/juju/juju/status"
    13  )
    14  
    15  type Backend interface {
    16  	common.APIHostPortsGetter
    17  	common.ModelConfigGetter
    18  	common.ToolsStorageGetter
    19  
    20  	ModelUUID() string
    21  	ModelsForUser(names.UserTag) ([]*state.UserModel, error)
    22  	IsControllerAdministrator(user names.UserTag) (bool, error)
    23  	NewModel(state.ModelArgs) (*state.Model, *state.State, error)
    24  	ControllerModel() (*state.Model, error)
    25  	ForModel(tag names.ModelTag) (Backend, error)
    26  	Model() (Model, error)
    27  	AddModelUser(state.ModelUserSpec) (*state.ModelUser, error)
    28  	RemoveModelUser(names.UserTag) error
    29  	ModelUser(names.UserTag) (*state.ModelUser, error)
    30  	Close() error
    31  }
    32  
    33  type Model interface {
    34  	Config() (*config.Config, error)
    35  	Life() state.Life
    36  	Owner() names.UserTag
    37  	Status() (status.StatusInfo, error)
    38  	Users() ([]common.ModelUser, error)
    39  }
    40  
    41  type stateShim struct {
    42  	*state.State
    43  }
    44  
    45  func NewStateBackend(st *state.State) Backend {
    46  	return stateShim{st}
    47  }
    48  
    49  func (st stateShim) ForModel(tag names.ModelTag) (Backend, error) {
    50  	otherState, err := st.State.ForModel(tag)
    51  	if err != nil {
    52  		return nil, err
    53  	}
    54  	return stateShim{otherState}, nil
    55  }
    56  
    57  func (st stateShim) Model() (Model, error) {
    58  	m, err := st.State.Model()
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	return modelShim{m}, nil
    63  }
    64  
    65  type modelShim struct {
    66  	*state.Model
    67  }
    68  
    69  func (m modelShim) Users() ([]common.ModelUser, error) {
    70  	stateUsers, err := m.Model.Users()
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  	users := make([]common.ModelUser, len(stateUsers))
    75  	for i, user := range stateUsers {
    76  		users[i] = user
    77  	}
    78  	return users, nil
    79  }