Write the Annotations map into the bolt db
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
parent
02cc1485df
commit
5124f9ee54
@ -24,6 +24,7 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
bucketKeyAnnotations = []byte("annotations")
|
||||
bucketKeyLabels = []byte("labels")
|
||||
bucketKeyCreatedAt = []byte("createdat")
|
||||
bucketKeyUpdatedAt = []byte("updatedat")
|
||||
@ -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 {
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user