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 }