瀏覽代碼

Merge pull request #46653 from vvoland/c8d-history-fix-tags

c8d/history: Fix Tags assigned from parents
Djordje Lukic 1 年之前
父節點
當前提交
29d863d451
共有 1 個文件被更改,包括 37 次插入13 次删除
  1. 37 13
      daemon/containerd/image_history.go

+ 37 - 13
daemon/containerd/image_history.go

@@ -97,32 +97,34 @@ func (i *ImageService) ImageHistory(ctx context.Context, name string) ([]*imaget
 			log.G(ctx).WithFields(log.Fields{
 			log.G(ctx).WithFields(log.Fields{
 				"error": err,
 				"error": err,
 				"image": img,
 				"image": img,
-			}).Warnf("failed to list parent images")
+			}).Warn("failed to list parent images")
 			return nil
 			return nil
 		}
 		}
 		return imgs
 		return imgs
 	}
 	}
 
 
+	is := i.client.ImageService()
 	currentImg := img
 	currentImg := img
 	for _, h := range history {
 	for _, h := range history {
-		h.ID = currentImg.Target.Digest.String()
-		imgs := findParents(currentImg)
+		dgst := currentImg.Target.Digest.String()
+		h.ID = dgst
+
+		imgs, err := is.List(ctx, "target.digest=="+dgst)
+		if err != nil {
+			return nil, err
+		}
+
+		tags := getImageTags(ctx, imgs)
+		h.Tags = append(h.Tags, tags...)
+
+		parents := findParents(currentImg)
 
 
 		foundNext := false
 		foundNext := false
-		for _, img := range imgs {
+		for _, img := range parents {
 			if _, ok := img.Labels[imageLabelClassicBuilderParent]; ok {
 			if _, ok := img.Labels[imageLabelClassicBuilderParent]; ok {
 				currentImg = img
 				currentImg = img
 				foundNext = true
 				foundNext = true
 			}
 			}
-
-			if isDanglingImage(img) {
-				continue
-			}
-			name, err := reference.ParseNamed(img.Name)
-			if err != nil {
-				return nil, err
-			}
-			h.Tags = append(h.Tags, reference.FamiliarString(name))
 		}
 		}
 
 
 		if !foundNext {
 		if !foundNext {
@@ -132,3 +134,25 @@ func (i *ImageService) ImageHistory(ctx context.Context, name string) ([]*imaget
 
 
 	return history, nil
 	return history, nil
 }
 }
+
+func getImageTags(ctx context.Context, imgs []images.Image) []string {
+	var tags []string
+	for _, img := range imgs {
+		if isDanglingImage(img) {
+			continue
+		}
+
+		name, err := reference.ParseNamed(img.Name)
+		if err != nil {
+			log.G(ctx).WithFields(log.Fields{
+				"name":  name,
+				"error": err,
+			}).Warn("image with a name that's not a valid named reference")
+			continue
+		}
+
+		tags = append(tags, reference.FamiliarString(name))
+	}
+
+	return tags
+}