github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/api/uniter/storage.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/api/base"
    11  	"github.com/juju/juju/apiserver/params"
    12  	"github.com/juju/juju/storage"
    13  )
    14  
    15  type StorageAccessor struct {
    16  	facade base.FacadeCaller
    17  }
    18  
    19  // NewStorageAccessor creates a StorageAccessor on the specified facade,
    20  // and uses this name when calling through the caller.
    21  func NewStorageAccessor(facade base.FacadeCaller) *StorageAccessor {
    22  	return &StorageAccessor{facade}
    23  }
    24  
    25  // StorageInstances returns the storage instances for a unit.
    26  func (sa *StorageAccessor) StorageInstances(unitTag names.Tag) ([]storage.StorageInstance, error) {
    27  	if sa.facade.BestAPIVersion() < 2 {
    28  		// StorageInstances() was introduced in UniterAPIV2.
    29  		return nil, errors.NotImplementedf("StorageInstances() (need V2+)")
    30  	}
    31  	args := params.Entities{
    32  		Entities: []params.Entity{
    33  			{Tag: unitTag.String()},
    34  		},
    35  	}
    36  	var results params.UnitStorageInstancesResults
    37  	err := sa.facade.FacadeCall("UnitStorageInstances", args, &results)
    38  	if err != nil {
    39  		return nil, errors.Trace(err)
    40  	}
    41  	if len(results.UnitsStorageInstances) != 1 {
    42  		panic(errors.Errorf("expected 1 result, got %d", len(results.UnitsStorageInstances)))
    43  	}
    44  	storageInstances := results.UnitsStorageInstances[0]
    45  	if storageInstances.Error != nil {
    46  		return nil, storageInstances.Error
    47  	}
    48  	return storageInstances.Instances, nil
    49  }