From 0625532dbc449458a420fe93448dee7c63fc0790 Mon Sep 17 00:00:00 2001 From: yanxuean Date: Wed, 18 Oct 2017 22:56:52 +0800 Subject: [PATCH] add digest sub-flag for list image fix #162 Signed-off-by: yanxuean --- cmd/crictl/image.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cmd/crictl/image.go b/cmd/crictl/image.go index ac7b921d18..2fb7c8219d 100644 --- a/cmd/crictl/image.go +++ b/cmd/crictl/image.go @@ -92,6 +92,10 @@ var listImageCommand = cli.Command{ Name: "output, o", Usage: "Output format, One of: json|yaml|table", }, + cli.BoolFlag{ + Name: "digests", + Usage: "Show digests", + }, }, Action: func(context *cli.Context) error { if err := getImageClient(context); err != nil { @@ -121,15 +125,25 @@ var listImageCommand = cli.Command{ continue } if !verbose { + showDigest := context.Bool("digests") if printHeader { printHeader = false - fmt.Fprintln(w, "IMAGE\tTAG\tIMAGE ID\tSIZE") + if showDigest { + fmt.Fprintln(w, "IMAGE\tTAG\tDIGEST\tIMAGE ID\tSIZE") + } else { + fmt.Fprintln(w, "IMAGE\tTAG\tIMAGE ID\tSIZE") + } } + repoDigest := normalizeRepoDigest(image.RepoDigests) repoTagPairs := normalizeRepoTagPair(image.RepoTags, image.RepoDigests) size := units.HumanSizeWithPrecision(float64(image.GetSize_()), 3) trunctedImage := strings.TrimPrefix(image.Id, "sha256:")[:truncatedImageIDLen] for _, repoTagPair := range repoTagPairs { - fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", repoTagPair[0], repoTagPair[1], trunctedImage, size) + if showDigest { + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", repoTagPair[0], repoTagPair[1], repoDigest, trunctedImage, size) + } else { + fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", repoTagPair[0], repoTagPair[1], trunctedImage, size) + } } continue } @@ -291,6 +305,17 @@ func normalizeRepoTagPair(repoTags []string, repoDigests []string) (repoTagPairs return } +func normalizeRepoDigest(repoDigests []string) string { + if len(repoDigests) == 0 { + return "" + } + repoDigestPair := strings.Split(repoDigests[0],"@") + if len(repoDigestPair) != 2 { + return "errorRepoDigest" + } + return repoDigestPair[1] +} + // PullImage sends a PullImageRequest to the server, and parses // the returned PullImageResponse. func PullImage(client pb.ImageServiceClient, image string, auth *pb.AuthConfig) (*pb.PullImageResponse, error) {