1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
9
"github.com/juju/juju/api/base"
10
"github.com/juju/juju/apiserver/params"
13
// Client provides access to cloud image metadata.
14
// It is used to find, save and update image metadata.
17
facade base.FacadeCaller
20
// NewClient returns a new metadata client.
21
func NewClient(st base.APICallCloser) *Client {
22
frontend, backend := base.NewClientFacade(st, "ImageMetadata")
23
return &Client{ClientFacade: frontend, facade: backend}
26
// List returns image metadata that matches filter.
27
// Empty filter will return all image metadata.
28
func (c *Client) List(
29
stream, region string,
30
series, arches []string,
31
virtType, rootStorageType string,
32
) ([]params.CloudImageMetadata, error) {
33
in := params.ImageMetadataFilter{
39
RootStorageType: rootStorageType,
41
out := params.ListCloudImageMetadataResult{}
42
err := c.facade.FacadeCall("List", in, &out)
43
return out.Result, err
46
// Save saves specified image metadata.
47
// Supports bulk saves for scenarios like cloud image metadata caching at bootstrap.
48
func (c *Client) Save(metadata []params.CloudImageMetadata) error {
49
in := params.MetadataSaveParams{
50
Metadata: []params.CloudImageMetadataList{{metadata}},
52
out := params.ErrorResults{}
53
err := c.facade.FacadeCall("Save", in, &out)
55
return errors.Trace(err)
57
if len(out.Results) != 1 {
58
return errors.Errorf("exected 1 result, got %d", len(out.Results))
60
if out.Results[0].Error != nil {
61
return errors.Trace(out.Results[0].Error)
66
// UpdateFromPublishedImages retrieves currently published image metadata and
67
// updates stored ones accordingly.
68
// This method is primarily intended for a worker.
69
func (c *Client) UpdateFromPublishedImages() error {
71
c.facade.FacadeCall("UpdateFromPublishedImages", nil, nil))
74
// Delete removes image metadata for given image id from stored metadata.
75
func (c *Client) Delete(imageId string) error {
76
in := params.MetadataImageIds{[]string{imageId}}
77
out := params.ErrorResults{}
78
err := c.facade.FacadeCall("Delete", in, &out)
80
return errors.Trace(err)
85
return errors.Errorf("expected to find one result for image id %q but found %d", imageId, len(result))
89
if theOne.Error != nil {
90
return errors.Trace(theOne.Error)