70 lines
2.3 KiB
Go
70 lines
2.3 KiB
Go
package manifest
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/containers/common/pkg/auth"
|
|
"github.com/containers/common/pkg/completion"
|
|
"github.com/containers/image/v5/types"
|
|
"github.com/containers/podman/v5/cmd/podman/common"
|
|
"github.com/containers/podman/v5/cmd/podman/registry"
|
|
"github.com/containers/podman/v5/pkg/domain/entities"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
inspectOptions entities.ManifestInspectOptions
|
|
tlsVerifyCLI bool
|
|
inspectCmd = &cobra.Command{
|
|
Use: "inspect [options] IMAGE",
|
|
Short: "Display the contents of a manifest list or image index",
|
|
Long: "Display the contents of a manifest list or image index.",
|
|
RunE: inspect,
|
|
ValidArgsFunction: common.AutocompleteImages,
|
|
Example: "podman manifest inspect localhost/list",
|
|
Args: cobra.ExactArgs(1),
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: inspectCmd,
|
|
Parent: manifestCmd,
|
|
})
|
|
flags := inspectCmd.Flags()
|
|
|
|
authfileFlagName := "authfile"
|
|
flags.StringVar(&inspectOptions.Authfile, authfileFlagName, auth.GetDefaultAuthFile(), "path of the authentication file. Use REGISTRY_AUTH_FILE environment variable to override")
|
|
_ = inspectCmd.RegisterFlagCompletionFunc(authfileFlagName, completion.AutocompleteDefault)
|
|
flags.BoolP("verbose", "v", false, "Added for Docker compatibility")
|
|
_ = flags.MarkHidden("verbose")
|
|
flags.BoolVar(&tlsVerifyCLI, "tls-verify", true, "require HTTPS and verify certificates when accessing the registry")
|
|
flags.Bool("insecure", false, "Purely for Docker compatibility")
|
|
_ = flags.MarkHidden("insecure")
|
|
}
|
|
|
|
func inspect(cmd *cobra.Command, args []string) error {
|
|
if cmd.Flags().Changed("authfile") {
|
|
if err := auth.CheckAuthFile(inspectOptions.Authfile); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if cmd.Flags().Changed("tls-verify") {
|
|
inspectOptions.SkipTLSVerify = types.NewOptionalBool(!tlsVerifyCLI)
|
|
} else if cmd.Flags().Changed("insecure") {
|
|
insecure, _ := cmd.Flags().GetBool("insecure")
|
|
inspectOptions.SkipTLSVerify = types.NewOptionalBool(insecure)
|
|
}
|
|
list, err := registry.ImageEngine().ManifestInspect(registry.Context(), args[0], inspectOptions)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
prettyJSON, err := json.MarshalIndent(list, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(string(prettyJSON))
|
|
return nil
|
|
}
|