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 (
|
var (
|
||||||
|
bucketKeyAnnotations = []byte("annotations")
|
||||||
bucketKeyLabels = []byte("labels")
|
bucketKeyLabels = []byte("labels")
|
||||||
bucketKeyCreatedAt = []byte("createdat")
|
bucketKeyCreatedAt = []byte("createdat")
|
||||||
bucketKeyUpdatedAt = []byte("updatedat")
|
bucketKeyUpdatedAt = []byte("updatedat")
|
||||||
@ -35,6 +36,12 @@ func ReadLabels(bkt *bolt.Bucket) (map[string]string, error) {
|
|||||||
return readMap(bkt, bucketKeyLabels)
|
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) {
|
func readMap(bkt *bolt.Bucket, bucketName []byte) (map[string]string, error) {
|
||||||
lbkt := bkt.Bucket(bucketName)
|
lbkt := bkt.Bucket(bucketName)
|
||||||
if lbkt == nil {
|
if lbkt == nil {
|
||||||
@ -60,6 +67,11 @@ func WriteLabels(bkt *bolt.Bucket, labels map[string]string) error {
|
|||||||
return writeMap(bkt, bucketKeyLabels, labels)
|
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 {
|
func writeMap(bkt *bolt.Bucket, bucketName []byte, labels map[string]string) error {
|
||||||
// Remove existing labels to keep from merging
|
// Remove existing labels to keep from merging
|
||||||
if lbkt := bkt.Bucket(bucketName); lbkt != nil {
|
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.")
|
key := strings.TrimPrefix(path, "labels.")
|
||||||
updated.Labels[key] = image.Labels[key]
|
updated.Labels[key] = image.Labels[key]
|
||||||
continue
|
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 {
|
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
|
// make sense to modify the size or digest without touching the
|
||||||
// mediatype, as well, for example.
|
// mediatype, as well, for example.
|
||||||
updated.Target = image.Target
|
updated.Target = image.Target
|
||||||
|
case "annotations":
|
||||||
|
updated.Target.Annotations = image.Target.Annotations
|
||||||
default:
|
default:
|
||||||
return errors.Wrapf(errdefs.ErrInvalidArgument, "cannot update %q field on image %q", path, image.Name)
|
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.Labels = labels
|
||||||
|
|
||||||
|
image.Target.Annotations, err = boltutil.ReadAnnotations(bkt)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
tbkt := bkt.Bucket(bucketKeyTarget)
|
tbkt := bkt.Bucket(bucketKeyTarget)
|
||||||
if tbkt == nil {
|
if tbkt == nil {
|
||||||
return errors.New("unable to read target bucket")
|
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)
|
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
|
// write the target bucket
|
||||||
tbkt, err := bkt.CreateBucketIfNotExists(bucketKeyTarget)
|
tbkt, err := bkt.CreateBucketIfNotExists(bucketKeyTarget)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user