github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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  	AddStorageForUnit(tag names.UnitTag, name string, cons state.StorageConstraints) error
    29  	UnitStorageConstraints(u names.UnitTag) (map[string]state.StorageConstraints, error)
    30  }
    31  
    32  type storageStateShim struct {
    33  	*state.State
    34  }
    35  
    36  var getStorageState = func(st *state.State) storageStateInterface {
    37  	return storageStateShim{st}
    38  }
    39  
    40  // UnitAssignedMachine returns the tag of the machine that the unit
    41  // is assigned to, or an error if the unit cannot be obtained or is
    42  // not assigned to a machine.
    43  func (s storageStateShim) UnitAssignedMachine(tag names.UnitTag) (names.MachineTag, error) {
    44  	unit, err := s.Unit(tag.Id())
    45  	if err != nil {
    46  		return names.MachineTag{}, errors.Trace(err)
    47  	}
    48  	mid, err := unit.AssignedMachineId()
    49  	if err != nil {
    50  		return names.MachineTag{}, errors.Trace(err)
    51  	}
    52  	return names.NewMachineTag(mid), nil
    53  }
    54  
    55  // UnitStorageConstraints returns storage constraints for this unit,
    56  // or an error if the unit or its constraints cannot be obtained.
    57  func (s storageStateShim) UnitStorageConstraints(u names.UnitTag) (map[string]state.StorageConstraints, error) {
    58  	unit, err := s.Unit(u.Id())
    59  	if err != nil {
    60  		return nil, errors.Trace(err)
    61  	}
    62  
    63  	cons, err := unit.StorageConstraints()
    64  	if err != nil {
    65  		return nil, errors.Trace(err)
    66  	}
    67  	return cons, nil
    68  }