github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/imagemetadatamanager/state.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadatamanager 5 6 import ( 7 "github.com/juju/errors" 8 "gopkg.in/juju/names.v2" 9 10 "github.com/juju/juju/environs/config" 11 "github.com/juju/juju/state" 12 "github.com/juju/juju/state/cloudimagemetadata" 13 ) 14 15 type metadataAccess interface { 16 FindMetadata(cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) 17 SaveMetadata([]cloudimagemetadata.Metadata) error 18 DeleteMetadata(imageId string) error 19 ModelConfig() (*config.Config, error) 20 ControllerTag() names.ControllerTag 21 } 22 23 type Model interface { 24 CloudRegion() string 25 } 26 27 var getState = func(st *state.State) metadataAccess { 28 return stateShim{st} 29 } 30 31 type stateShim struct { 32 *state.State 33 } 34 35 func (s stateShim) FindMetadata(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 36 return s.State.CloudImageMetadataStorage.FindMetadata(f) 37 } 38 39 func (s stateShim) SaveMetadata(m []cloudimagemetadata.Metadata) error { 40 return s.State.CloudImageMetadataStorage.SaveMetadata(m) 41 } 42 43 func (s stateShim) DeleteMetadata(imageId string) error { 44 return s.State.CloudImageMetadataStorage.DeleteMetadata(imageId) 45 } 46 47 // ModelConfig implements the metadataAccess method as an expedient until the 48 // State is replaced with its underlying Model. 49 func (s stateShim) ModelConfig() (*config.Config, error) { 50 model, err := s.State.Model() 51 if err != nil { 52 return nil, errors.Trace(err) 53 } 54 cfg, err := model.Config() 55 if err != nil { 56 return nil, errors.Trace(err) 57 } 58 59 return cfg, nil 60 }