github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/uniter/state.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/names" 9 10 "github.com/juju/juju/state" 11 ) 12 13 type storageStateInterface interface { 14 RemoveStorageAttachment(names.StorageTag, names.UnitTag) error 15 StorageInstance(names.StorageTag) (state.StorageInstance, error) 16 StorageInstanceFilesystem(names.StorageTag) (state.Filesystem, error) 17 StorageInstanceVolume(names.StorageTag) (state.Volume, error) 18 UnitStorageAttachments(names.UnitTag) ([]state.StorageAttachment, error) 19 DestroyUnitStorageAttachments(names.UnitTag) error 20 StorageAttachment(names.StorageTag, names.UnitTag) (state.StorageAttachment, error) 21 UnitAssignedMachine(names.UnitTag) (names.MachineTag, error) 22 FilesystemAttachment(names.MachineTag, names.FilesystemTag) (state.FilesystemAttachment, error) 23 VolumeAttachment(names.MachineTag, names.VolumeTag) (state.VolumeAttachment, error) 24 WatchStorageAttachments(names.UnitTag) state.StringsWatcher 25 WatchStorageAttachment(names.StorageTag, names.UnitTag) state.NotifyWatcher 26 WatchFilesystemAttachment(names.MachineTag, names.FilesystemTag) state.NotifyWatcher 27 WatchVolumeAttachment(names.MachineTag, names.VolumeTag) state.NotifyWatcher 28 WatchBlockDevices(names.MachineTag) state.NotifyWatcher 29 AddStorageForUnit(tag names.UnitTag, name string, cons state.StorageConstraints) error 30 UnitStorageConstraints(u names.UnitTag) (map[string]state.StorageConstraints, error) 31 BlockDevices(names.MachineTag) ([]state.BlockDeviceInfo, error) 32 } 33 34 type storageStateShim struct { 35 *state.State 36 } 37 38 var getStorageState = func(st *state.State) storageStateInterface { 39 return storageStateShim{st} 40 } 41 42 // UnitAssignedMachine returns the tag of the machine that the unit 43 // is assigned to, or an error if the unit cannot be obtained or is 44 // not assigned to a machine. 45 func (s storageStateShim) UnitAssignedMachine(tag names.UnitTag) (names.MachineTag, error) { 46 unit, err := s.Unit(tag.Id()) 47 if err != nil { 48 return names.MachineTag{}, errors.Trace(err) 49 } 50 mid, err := unit.AssignedMachineId() 51 if err != nil { 52 return names.MachineTag{}, errors.Trace(err) 53 } 54 return names.NewMachineTag(mid), nil 55 } 56 57 // UnitStorageConstraints returns storage constraints for this unit, 58 // or an error if the unit or its constraints cannot be obtained. 59 func (s storageStateShim) UnitStorageConstraints(u names.UnitTag) (map[string]state.StorageConstraints, error) { 60 unit, err := s.Unit(u.Id()) 61 if err != nil { 62 return nil, errors.Trace(err) 63 } 64 65 cons, err := unit.StorageConstraints() 66 if err != nil { 67 return nil, errors.Trace(err) 68 } 69 return cons, nil 70 }