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 }