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  }