github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/common/imagecommon/imagemetadata.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagecommon 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/apiserver/common" 10 "github.com/juju/juju/apiserver/params" 11 "github.com/juju/juju/environs/config" 12 "github.com/juju/juju/state/cloudimagemetadata" 13 ) 14 15 // ImageMetadataInterface is an interface for manipulating images metadata. 16 type ImageMetadataInterface interface { 17 18 // SaveMetadata persists collection of given images metadata. 19 SaveMetadata([]cloudimagemetadata.Metadata) error 20 21 // ModelConfig retrieves configuration for a current model. 22 ModelConfig() (*config.Config, error) 23 } 24 25 // Save stores given cloud image metadata using given persistence interface. 26 func Save(st ImageMetadataInterface, metadata params.MetadataSaveParams) ([]params.ErrorResult, error) { 27 all := make([]params.ErrorResult, len(metadata.Metadata)) 28 if len(metadata.Metadata) == 0 { 29 return nil, nil 30 } 31 modelCfg, err := st.ModelConfig() 32 if err != nil { 33 return nil, errors.Annotatef(err, "getting model config") 34 } 35 for i, one := range metadata.Metadata { 36 md := ParseMetadataListFromParams(one, modelCfg) 37 err := st.SaveMetadata(md) 38 all[i] = params.ErrorResult{Error: common.ServerError(err)} 39 } 40 return all, nil 41 } 42 43 // ParseMetadataListFromParams translates params.CloudImageMetadataList 44 // into a collection of cloudimagemetadata.Metadata. 45 func ParseMetadataListFromParams(p params.CloudImageMetadataList, cfg *config.Config) []cloudimagemetadata.Metadata { 46 results := make([]cloudimagemetadata.Metadata, len(p.Metadata)) 47 for i, metadata := range p.Metadata { 48 results[i] = cloudimagemetadata.Metadata{ 49 MetadataAttributes: cloudimagemetadata.MetadataAttributes{ 50 Stream: metadata.Stream, 51 Region: metadata.Region, 52 Version: metadata.Version, 53 Series: metadata.Series, 54 Arch: metadata.Arch, 55 VirtType: metadata.VirtType, 56 RootStorageType: metadata.RootStorageType, 57 RootStorageSize: metadata.RootStorageSize, 58 Source: metadata.Source, 59 }, 60 Priority: metadata.Priority, 61 ImageId: metadata.ImageId, 62 } 63 // TODO (anastasiamac 2016-08-24) This is a band-aid solution. 64 // Once correct value is read from simplestreams, this needs to go. 65 // Bug# 1616295 66 if results[i].Stream == "" { 67 results[i].Stream = cfg.ImageStream() 68 } 69 } 70 return results 71 }