github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/storageprovisioner/state.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package storageprovisioner
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/names"
     9  
    10  	"github.com/juju/juju/instance"
    11  	"github.com/juju/juju/state"
    12  )
    13  
    14  type provisionerState interface {
    15  	state.EntityFinder
    16  	state.ModelAccessor
    17  
    18  	MachineInstanceId(names.MachineTag) (instance.Id, error)
    19  	BlockDevices(names.MachineTag) ([]state.BlockDeviceInfo, error)
    20  
    21  	WatchBlockDevices(names.MachineTag) state.NotifyWatcher
    22  	WatchMachine(names.MachineTag) (state.NotifyWatcher, error)
    23  	WatchModelFilesystems() state.StringsWatcher
    24  	WatchEnvironFilesystemAttachments() state.StringsWatcher
    25  	WatchMachineFilesystems(names.MachineTag) state.StringsWatcher
    26  	WatchMachineFilesystemAttachments(names.MachineTag) state.StringsWatcher
    27  	WatchModelVolumes() state.StringsWatcher
    28  	WatchEnvironVolumeAttachments() state.StringsWatcher
    29  	WatchMachineVolumes(names.MachineTag) state.StringsWatcher
    30  	WatchMachineVolumeAttachments(names.MachineTag) state.StringsWatcher
    31  	WatchVolumeAttachment(names.MachineTag, names.VolumeTag) state.NotifyWatcher
    32  
    33  	StorageInstance(names.StorageTag) (state.StorageInstance, error)
    34  
    35  	Filesystem(names.FilesystemTag) (state.Filesystem, error)
    36  	FilesystemAttachment(names.MachineTag, names.FilesystemTag) (state.FilesystemAttachment, error)
    37  
    38  	Volume(names.VolumeTag) (state.Volume, error)
    39  	VolumeAttachment(names.MachineTag, names.VolumeTag) (state.VolumeAttachment, error)
    40  	VolumeAttachments(names.VolumeTag) ([]state.VolumeAttachment, error)
    41  
    42  	RemoveFilesystem(names.FilesystemTag) error
    43  	RemoveFilesystemAttachment(names.MachineTag, names.FilesystemTag) error
    44  	RemoveVolume(names.VolumeTag) error
    45  	RemoveVolumeAttachment(names.MachineTag, names.VolumeTag) error
    46  
    47  	SetFilesystemInfo(names.FilesystemTag, state.FilesystemInfo) error
    48  	SetFilesystemAttachmentInfo(names.MachineTag, names.FilesystemTag, state.FilesystemAttachmentInfo) error
    49  	SetVolumeInfo(names.VolumeTag, state.VolumeInfo) error
    50  	SetVolumeAttachmentInfo(names.MachineTag, names.VolumeTag, state.VolumeAttachmentInfo) error
    51  }
    52  
    53  type stateShim struct {
    54  	*state.State
    55  }
    56  
    57  func (s stateShim) MachineInstanceId(tag names.MachineTag) (instance.Id, error) {
    58  	m, err := s.Machine(tag.Id())
    59  	if err != nil {
    60  		return "", errors.Trace(err)
    61  	}
    62  	return m.InstanceId()
    63  }
    64  
    65  func (s stateShim) WatchMachine(tag names.MachineTag) (state.NotifyWatcher, error) {
    66  	m, err := s.Machine(tag.Id())
    67  	if err != nil {
    68  		return nil, errors.Trace(err)
    69  	}
    70  	return m.Watch(), nil
    71  }