github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/imagemetadata/client.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadata 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/loggo" 9 10 "github.com/juju/juju/api/base" 11 "github.com/juju/juju/apiserver/params" 12 ) 13 14 var logger = loggo.GetLogger("juju.api.imagemetadata") 15 16 // Client provides access to cloud image metadata. 17 // It is used to find, save and update image metadata. 18 type Client struct { 19 base.ClientFacade 20 facade base.FacadeCaller 21 } 22 23 // NewClient returns a new metadata client. 24 func NewClient(st base.APICallCloser) *Client { 25 frontend, backend := base.NewClientFacade(st, "ImageMetadata") 26 return &Client{ClientFacade: frontend, facade: backend} 27 } 28 29 // List returns image metadata that matches filter. 30 // Empty filter will return all image metadata. 31 func (c *Client) List( 32 stream, region string, 33 series, arches []string, 34 virtType, rootStorageType string, 35 ) ([]params.CloudImageMetadata, error) { 36 in := params.ImageMetadataFilter{ 37 Region: region, 38 Series: series, 39 Arches: arches, 40 Stream: stream, 41 VirtType: virtType, 42 RootStorageType: rootStorageType, 43 } 44 out := params.ListCloudImageMetadataResult{} 45 err := c.facade.FacadeCall("List", in, &out) 46 return out.Result, err 47 } 48 49 // Save saves specified image metadata. 50 // Supports bulk saves for scenarios like cloud image metadata caching at bootstrap. 51 func (c *Client) Save(metadata []params.CloudImageMetadata) ([]params.ErrorResult, error) { 52 in := params.MetadataSaveParams{Metadata: metadata} 53 out := params.ErrorResults{} 54 err := c.facade.FacadeCall("Save", in, &out) 55 if err != nil { 56 return nil, errors.Trace(err) 57 } 58 return out.Results, nil 59 } 60 61 // UpdateFromPublishedImages retrieves currently published image metadata and 62 // updates stored ones accordingly. 63 // This method is primarily intended for a worker. 64 func (c *Client) UpdateFromPublishedImages() error { 65 return errors.Trace( 66 c.facade.FacadeCall("UpdateFromPublishedImages", nil, nil)) 67 }