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  }