github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/apiserver/diskformatter/state.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package diskformatter
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/juju/api/watcher"
     9  	"github.com/juju/juju/state"
    10  	"github.com/juju/names"
    11  )
    12  
    13  type stateInterface interface {
    14  	WatchUnitMachineBlockDevices(names.UnitTag) (watcher.StringsWatcher, error)
    15  	BlockDevice(name string) (state.BlockDevice, error)
    16  	StorageInstance(id string) (state.StorageInstance, error)
    17  }
    18  
    19  var getState = func(st *state.State) stateInterface {
    20  	return stateShim{st}
    21  }
    22  
    23  type stateShim struct {
    24  	*state.State
    25  }
    26  
    27  func (s stateShim) WatchUnitMachineBlockDevices(
    28  	tag names.UnitTag,
    29  ) (watcher.StringsWatcher, error) {
    30  	u, err := s.State.Unit(tag.Id())
    31  	if err != nil {
    32  		return nil, errors.Trace(err)
    33  	}
    34  	mid, err := u.AssignedMachineId()
    35  	if err != nil {
    36  		return nil, errors.Trace(err)
    37  	}
    38  	m, err := s.State.Machine(mid)
    39  	if err != nil {
    40  		return nil, errors.Trace(err)
    41  	}
    42  	return m.WatchBlockDevices(), nil
    43  }