diff --git a/cmd/skopeo/inspect.go b/cmd/skopeo/inspect.go index a8f72473..d45b884e 100644 --- a/cmd/skopeo/inspect.go +++ b/cmd/skopeo/inspect.go @@ -24,12 +24,13 @@ import ( ) type inspectOptions struct { - global *globalOptions - image *imageOptions - retryOpts *retry.RetryOptions - format string - raw bool // Output the raw manifest instead of parsing information about the image - config bool // Output the raw config blob instead of parsing information about the image + global *globalOptions + image *imageOptions + retryOpts *retry.RetryOptions + format string + raw bool // Output the raw manifest instead of parsing information about the image + config bool // Output the raw config blob instead of parsing information about the image + doNotListTags bool // Do not list all tags available in the same repository } func inspectCmd(global *globalOptions) *cobra.Command { @@ -60,6 +61,7 @@ See skopeo(1) section "IMAGE NAMES" for the expected format flags.BoolVar(&opts.raw, "raw", false, "output raw manifest or configuration") flags.BoolVar(&opts.config, "config", false, "output configuration") flags.StringVarP(&opts.format, "format", "f", "", "Format the output to a Go template") + flags.BoolVarP(&opts.doNotListTags, "no-tags", "n", false, "Do not list the available tags from the repository in the output") flags.AddFlagSet(&sharedFlags) flags.AddFlagSet(&imageFlags) flags.AddFlagSet(&retryFlags) @@ -192,7 +194,7 @@ func (opts *inspectOptions) run(args []string, stdout io.Writer) (retErr error) if dockerRef := img.Reference().DockerReference(); dockerRef != nil { outputData.Name = dockerRef.Name() } - if img.Reference().Transport() == docker.Transport { + if !opts.doNotListTags && img.Reference().Transport() == docker.Transport { sys, err := opts.image.newSystemContext() if err != nil { return err diff --git a/completions/bash/skopeo b/completions/bash/skopeo index f5a28918..b080543a 100644 --- a/completions/bash/skopeo +++ b/completions/bash/skopeo @@ -132,6 +132,7 @@ _skopeo_inspect() { --raw --tls-verify --no-creds + --no-tags -n " local transports diff --git a/docs/skopeo-inspect.1.md b/docs/skopeo-inspect.1.md index bfd84653..333d134e 100644 --- a/docs/skopeo-inspect.1.md +++ b/docs/skopeo-inspect.1.md @@ -77,6 +77,10 @@ The username to access the registry. The password to access the registry. +**--no-tags**, **-n**=_bool_ + +Do not list the available tags from the repository in the output. When `true`, the `RepoTags` array will be empty. Defaults to `false`, which includes all available tags. + ## EXAMPLES To review information for the image fedora from the docker.io registry: @@ -106,6 +110,42 @@ $ skopeo inspect docker://docker.io/fedora } ``` +To inspect python from the docker.io registry and not show the available tags: +```sh +$ skopeo inspect --no-tags docker://docker.io/library/python +{ + "Name": "docker.io/library/python", + "Digest": "sha256:5ca194a80ddff913ea49c8154f38da66a41d2b73028c5cf7e46bc3c1d6fda572", + "RepoTags": [], + "Created": "2021-10-05T23:40:54.936108045Z", + "DockerVersion": "20.10.7", + "Labels": null, + "Architecture": "amd64", + "Os": "linux", + "Layers": [ + "sha256:df5590a8898bedd76f02205dc8caa5cc9863267dbcd8aac038bcd212688c1cc7", + "sha256:705bb4cb554eb7751fd21a994f6f32aee582fbe5ea43037db6c43d321763992b", + "sha256:519df5fceacdeaadeec563397b1d9f4d7c29c9f6eff879739cab6f0c144f49e1", + "sha256:ccc287cbeddc96a0772397ca00ec85482a7b7f9a9fac643bfddd87b932f743db", + "sha256:e3f8e6af58ed3a502f0c3c15dce636d9d362a742eb5b67770d0cfcb72f3a9884", + "sha256:aebed27b2d86a5a3a2cbe186247911047a7e432b9d17daad8f226597c0ea4276", + "sha256:54c32182bdcc3041bf64077428467109a70115888d03f7757dcf614ff6d95ebe", + "sha256:cc8b7caedab13af07adf4836e13af2d4e9e54d794129b0fd4c83ece6b1112e86", + "sha256:462c3718af1d5cdc050cfba102d06c26f78fe3b738ce2ca2eb248034b1738945" + ], + "Env": [ + "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D", + "PYTHON_VERSION=3.10.0", + "PYTHON_PIP_VERSION=21.2.4", + "PYTHON_SETUPTOOLS_VERSION=57.5.0", + "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/d781367b97acf0ece7e9e304bf281e99b618bf10/public/get-pip.py", + "PYTHON_GET_PIP_SHA256=01249aa3e58ffb3e1686b7141b4e9aac4d398ef4ac3012ed9dff8dd9f685ffe0" + ] +} +``` + ``` $ /bin/skopeo inspect --config docker://registry.fedoraproject.org/fedora --format "{{ .Architecture }}" amd64 diff --git a/systemtest/010-inspect.bats b/systemtest/010-inspect.bats index 69370db3..5da3772e 100644 --- a/systemtest/010-inspect.bats +++ b/systemtest/010-inspect.bats @@ -108,4 +108,15 @@ END_EXPECT "os - variant - architecture of $img" } +@test "inspect: don't list tags" { + remote_image=docker://quay.io/fedora/fedora + # use --no-tags to not list any tags + run_skopeo inspect --no-tags $remote_image + inspect_output=$output + # extract the content of "RepoTags" property from the JSON output + repo_tags=$(jq '.RepoTags[]' <<<"$inspect_output") + # verify that the RepoTags was empty + expect_output --from="$repo_tags" "" "inspect --no-tags was expected to return empty RepoTags[]" +} + # vim: filetype=sh