From 5124f9ee5472bfe1f61bbd37a1be879d1e5a14de Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Thu, 7 Mar 2019 13:53:48 -0500 Subject: [PATCH] Write the Annotations map into the bolt db Signed-off-by: Stefan Berger --- metadata/boltutil/helpers.go | 18 +++++++++++++++--- metadata/images.go | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/metadata/boltutil/helpers.go b/metadata/boltutil/helpers.go index 2b3c2bfb7..94af315f9 100644 --- a/metadata/boltutil/helpers.go +++ b/metadata/boltutil/helpers.go @@ -24,9 +24,10 @@ import ( ) var ( - bucketKeyLabels = []byte("labels") - bucketKeyCreatedAt = []byte("createdat") - bucketKeyUpdatedAt = []byte("updatedat") + bucketKeyAnnotations = []byte("annotations") + bucketKeyLabels = []byte("labels") + bucketKeyCreatedAt = []byte("createdat") + bucketKeyUpdatedAt = []byte("updatedat") ) // ReadLabels reads the labels key from the bucket @@ -35,6 +36,12 @@ func ReadLabels(bkt *bolt.Bucket) (map[string]string, error) { return readMap(bkt, bucketKeyLabels) } +// ReadAnnotations reads the OCI Descriptor Annotations key from the bucket +// Uses the key "annotations" +func ReadAnnotations(bkt *bolt.Bucket) (map[string]string, error) { + return readMap(bkt, bucketKeyAnnotations) +} + func readMap(bkt *bolt.Bucket, bucketName []byte) (map[string]string, error) { lbkt := bkt.Bucket(bucketName) if lbkt == nil { @@ -60,6 +67,11 @@ func WriteLabels(bkt *bolt.Bucket, labels map[string]string) error { return writeMap(bkt, bucketKeyLabels, labels) } +// WriteAnnotations writes the OCI Descriptor Annotations +func WriteAnnotations(bkt *bolt.Bucket, labels map[string]string) error { + return writeMap(bkt, bucketKeyAnnotations, labels) +} + func writeMap(bkt *bolt.Bucket, bucketName []byte, labels map[string]string) error { // Remove existing labels to keep from merging if lbkt := bkt.Bucket(bucketName); lbkt != nil { diff --git a/metadata/images.go b/metadata/images.go index 762f6fb1a..1dda753db 100644 --- a/metadata/images.go +++ b/metadata/images.go @@ -192,6 +192,14 @@ func (s *imageStore) Update(ctx context.Context, image images.Image, fieldpaths key := strings.TrimPrefix(path, "labels.") updated.Labels[key] = image.Labels[key] continue + } else if strings.HasPrefix(path, "annotations.") { + if updated.Target.Annotations == nil { + updated.Target.Annotations = map[string]string{} + } + + key := strings.TrimPrefix(path, "annotations.") + updated.Target.Annotations[key] = image.Target.Annotations[key] + continue } switch path { @@ -204,6 +212,8 @@ func (s *imageStore) Update(ctx context.Context, image images.Image, fieldpaths // make sense to modify the size or digest without touching the // mediatype, as well, for example. updated.Target = image.Target + case "annotations": + updated.Target.Annotations = image.Target.Annotations default: return errors.Wrapf(errdefs.ErrInvalidArgument, "cannot update %q field on image %q", path, image.Name) } @@ -298,6 +308,11 @@ func readImage(image *images.Image, bkt *bolt.Bucket) error { } image.Labels = labels + image.Target.Annotations, err = boltutil.ReadAnnotations(bkt) + if err != nil { + return err + } + tbkt := bkt.Bucket(bucketKeyTarget) if tbkt == nil { return errors.New("unable to read target bucket") @@ -331,6 +346,10 @@ func writeImage(bkt *bolt.Bucket, image *images.Image) error { return errors.Wrapf(err, "writing labels for image %v", image.Name) } + if err := boltutil.WriteAnnotations(bkt, image.Target.Annotations); err != nil { + return errors.Wrapf(err, "writing Annotations for image %v", image.Name) + } + // write the target bucket tbkt, err := bkt.CreateBucketIfNotExists(bucketKeyTarget) if err != nil {