From 1090d4d5d99410b5433330516a4ea3f5e5a27375 Mon Sep 17 00:00:00 2001
From: Qi Wang <qiwan@redhat.com>
Date: Wed, 29 Apr 2020 10:51:02 -0400
Subject: manifest annotate

Signed-off-by: Qi Wang <qiwan@redhat.com>
---
 pkg/bindings/manifests/manifests.go | 21 +++++++++++++++++++++
 pkg/bindings/test/manifests_test.go | 20 ++++++++++++++++++++
 2 files changed, 41 insertions(+)

(limited to 'pkg/bindings')

diff --git a/pkg/bindings/manifests/manifests.go b/pkg/bindings/manifests/manifests.go
index a8d1e6ca3..b85169410 100644
--- a/pkg/bindings/manifests/manifests.go
+++ b/pkg/bindings/manifests/manifests.go
@@ -124,3 +124,24 @@ func Push(ctx context.Context, name string, destination *string, all *bool) (str
 	}
 	return idr.ID, response.Process(&idr)
 }
+
+// Annotate updates the image configuration of a given manifest list
+func Annotate(ctx context.Context, name, digest string, options image.ManifestAnnotateOpts) (string, error) {
+	var idr handlers.IDResponse
+	conn, err := bindings.GetClient(ctx)
+	if err != nil {
+		return "", err
+	}
+	params := url.Values{}
+	params.Set("digest", digest)
+	optionsString, err := jsoniter.MarshalToString(options)
+	if err != nil {
+		return "", err
+	}
+	stringReader := strings.NewReader(optionsString)
+	response, err := conn.DoRequest(stringReader, http.MethodPost, "/manifests/%s/annotate", params, name)
+	if err != nil {
+		return "", err
+	}
+	return idr.ID, response.Process(&idr)
+}
diff --git a/pkg/bindings/test/manifests_test.go b/pkg/bindings/test/manifests_test.go
index 4987dfe5b..ddb75865c 100644
--- a/pkg/bindings/test/manifests_test.go
+++ b/pkg/bindings/test/manifests_test.go
@@ -118,6 +118,26 @@ var _ = Describe("Podman containers ", func() {
 		Expect(len(data.Manifests)).To(BeZero())
 	})
 
+	It("annotate manifest", func() {
+		id, err := manifests.Create(bt.conn, []string{"quay.io/libpod/foobar:latest"}, []string{}, nil)
+		Expect(err).To(BeNil())
+		opts := image.ManifestAddOpts{Images: []string{"docker.io/library/alpine:latest"}}
+
+		_, err = manifests.Add(bt.conn, id, opts)
+		Expect(err).To(BeNil())
+		data, err := manifests.Inspect(bt.conn, id)
+		Expect(err).To(BeNil())
+		Expect(len(data.Manifests)).To(BeNumerically("==", 1))
+		digest := data.Manifests[0].Digest.String()
+		annoOpts := image.ManifestAnnotateOpts{OS: "foo"}
+		_, err = manifests.Annotate(bt.conn, id, digest, annoOpts)
+		Expect(err).To(BeNil())
+		list, err := manifests.Inspect(bt.conn, id)
+		Expect(err).To(BeNil())
+		Expect(len(list.Manifests)).To(BeNumerically("==", 1))
+		Expect(list.Manifests[0].Platform.OS).To(Equal("foo"))
+	})
+
 	It("push manifest", func() {
 		Skip("TODO")
 	})
-- 
cgit v1.2.3-54-g00ecf