summaryrefslogtreecommitdiff
path: root/cmd/podmanV2/images/search.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/podmanV2/images/search.go')
-rw-r--r--cmd/podmanV2/images/search.go156
1 files changed, 0 insertions, 156 deletions
diff --git a/cmd/podmanV2/images/search.go b/cmd/podmanV2/images/search.go
deleted file mode 100644
index 17c72784c..000000000
--- a/cmd/podmanV2/images/search.go
+++ /dev/null
@@ -1,156 +0,0 @@
-package images
-
-import (
- "reflect"
- "strings"
-
- buildahcli "github.com/containers/buildah/pkg/cli"
- "github.com/containers/buildah/pkg/formats"
- "github.com/containers/image/v5/types"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/util/camelcase"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
-)
-
-// searchOptionsWrapper wraps entities.ImagePullOptions and prevents leaking
-// CLI-only fields into the API types.
-type searchOptionsWrapper struct {
- entities.ImageSearchOptions
- // CLI only flags
- TLSVerifyCLI bool // Used to convert to an optional bool later
- Format string // For go templating
-}
-
-var (
- searchOptions = searchOptionsWrapper{}
- searchDescription = `Search registries for a given image. Can search all the default registries or a specific registry.
-
- Users can limit the number of results, and filter the output based on certain conditions.`
-
- // Command: podman search
- searchCmd = &cobra.Command{
- Use: "search [flags] TERM",
- Short: "Search registry for image",
- Long: searchDescription,
- RunE: imageSearch,
- Args: cobra.ExactArgs(1),
- Annotations: map[string]string{
- registry.ParentNSRequired: "",
- },
- Example: `podman search --filter=is-official --limit 3 alpine
- podman search registry.fedoraproject.org/ # only works with v2 registries
- podman search --format "table {{.Index}} {{.Name}}" registry.fedoraproject.org/fedora`,
- }
-
- // Command: podman image search
- imageSearchCmd = &cobra.Command{
- Use: searchCmd.Use,
- Short: searchCmd.Short,
- Long: searchCmd.Long,
- RunE: searchCmd.RunE,
- Args: searchCmd.Args,
- Example: `podman image search --filter=is-official --limit 3 alpine
- podman image search registry.fedoraproject.org/ # only works with v2 registries
- podman image search --format "table {{.Index}} {{.Name}}" registry.fedoraproject.org/fedora`,
- }
-)
-
-func init() {
- // search
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: searchCmd,
- })
-
- flags := searchCmd.Flags()
- searchFlags(flags)
-
- // images search
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: imageSearchCmd,
- Parent: imageCmd,
- })
-
- imageSearchFlags := imageSearchCmd.Flags()
- searchFlags(imageSearchFlags)
-}
-
-// searchFlags set the flags for the pull command.
-func searchFlags(flags *pflag.FlagSet) {
- flags.StringSliceVarP(&searchOptions.Filters, "filter", "f", []string{}, "Filter output based on conditions provided (default [])")
- flags.StringVar(&searchOptions.Format, "format", "", "Change the output format to a Go template")
- flags.IntVar(&searchOptions.Limit, "limit", 0, "Limit the number of results")
- flags.BoolVar(&searchOptions.NoTrunc, "no-trunc", false, "Do not truncate the output")
- flags.StringVar(&searchOptions.Authfile, "authfile", buildahcli.GetDefaultAuthFile(), "Path of the authentication file. Use REGISTRY_AUTH_FILE environment variable to override")
- flags.BoolVar(&searchOptions.TLSVerifyCLI, "tls-verify", true, "Require HTTPS and verify certificates when contacting registries")
- if registry.IsRemote() {
- _ = flags.MarkHidden("authfile")
- _ = flags.MarkHidden("tls-verify")
- }
-}
-
-// imageSearch implements the command for searching images.
-func imageSearch(cmd *cobra.Command, args []string) error {
- searchTerm := ""
- switch len(args) {
- case 1:
- searchTerm = args[0]
- default:
- return errors.Errorf("search requires exactly one argument")
- }
-
- sarchOptsAPI := searchOptions.ImageSearchOptions
- // TLS verification in c/image is controlled via a `types.OptionalBool`
- // which allows for distinguishing among set-true, set-false, unspecified
- // which is important to implement a sane way of dealing with defaults of
- // boolean CLI flags.
- if cmd.Flags().Changed("tls-verify") {
- sarchOptsAPI.TLSVerify = types.NewOptionalBool(pullOptions.TLSVerifyCLI)
- }
-
- searchReport, err := registry.ImageEngine().Search(registry.GetContext(), searchTerm, sarchOptsAPI)
- if err != nil {
- return err
- }
-
- format := genSearchFormat(searchOptions.Format)
- if len(searchReport) == 0 {
- return nil
- }
- out := formats.StdoutTemplateArray{Output: searchToGeneric(searchReport), Template: format, Fields: searchHeaderMap()}
- return out.Out()
-}
-
-// searchHeaderMap returns the headers of a SearchResult.
-func searchHeaderMap() map[string]string {
- s := new(entities.ImageSearchReport)
- v := reflect.Indirect(reflect.ValueOf(s))
- values := make(map[string]string, v.NumField())
-
- for i := 0; i < v.NumField(); i++ {
- key := v.Type().Field(i).Name
- value := key
- values[key] = strings.ToUpper(strings.Join(camelcase.Split(value), " "))
- }
- return values
-}
-
-func genSearchFormat(format string) string {
- if format != "" {
- // "\t" from the command line is not being recognized as a tab
- // replacing the string "\t" to a tab character if the user passes in "\t"
- return strings.Replace(format, `\t`, "\t", -1)
- }
- return "table {{.Index}}\t{{.Name}}\t{{.Description}}\t{{.Stars}}\t{{.Official}}\t{{.Automated}}\t"
-}
-
-func searchToGeneric(params []entities.ImageSearchReport) (genericParams []interface{}) {
- for _, v := range params {
- genericParams = append(genericParams, interface{}(v))
- }
- return genericParams
-}