shell completion: update podman inspect --type options

Add all option that are supported by the podman inspect --type flag to
the completions. Also use the same constants instead of duplicating the
strings. In order to do this I had to move the definitions into the
common package to prevent an import cycle.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
Paul Holzinger
2022-05-17 16:20:30 +02:00
parent 318e95fd2a
commit 74f70315b3
9 changed files with 42 additions and 42 deletions

View File

@ -1141,9 +1141,8 @@ func AutocompleteImageSort(cmd *cobra.Command, args []string, toComplete string)
} }
// AutocompleteInspectType - Autocomplete inspect type options. // AutocompleteInspectType - Autocomplete inspect type options.
// -> "container", "image", "all"
func AutocompleteInspectType(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { func AutocompleteInspectType(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
types := []string{"container", "image", "all"} types := []string{AllType, ContainerType, ImageType, NetworkType, PodType, VolumeType}
return types, cobra.ShellCompDirectiveNoFileComp return types, cobra.ShellCompDirectiveNoFileComp
} }

View File

@ -0,0 +1,16 @@
package common
const (
// AllType can be of type ImageType or ContainerType.
AllType = "all"
// ContainerType is the container type.
ContainerType = "container"
// ImageType is the image type.
ImageType = "image"
// NetworkType is the network type
NetworkType = "network"
// PodType is the pod type.
PodType = "pod"
// VolumeType is the volume type
VolumeType = "volume"
)

View File

@ -42,6 +42,6 @@ func init() {
func inspectExec(cmd *cobra.Command, args []string) error { func inspectExec(cmd *cobra.Command, args []string) error {
// Force container type // Force container type
inspectOpts.Type = inspect.ContainerType inspectOpts.Type = common.ContainerType
return inspect.Inspect(args, *inspectOpts) return inspect.Inspect(args, *inspectOpts)
} }

View File

@ -38,6 +38,6 @@ func init() {
} }
func inspectExec(cmd *cobra.Command, args []string) error { func inspectExec(cmd *cobra.Command, args []string) error {
inspectOpts.Type = inspect.ImageType inspectOpts.Type = common.ImageType
return inspect.Inspect(args, *inspectOpts) return inspect.Inspect(args, *inspectOpts)
} }

View File

@ -21,21 +21,6 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
const (
// AllType can be of type ImageType or ContainerType.
AllType = "all"
// ContainerType is the container type.
ContainerType = "container"
// ImageType is the image type.
ImageType = "image"
// NetworkType is the network type
NetworkType = "network"
// PodType is the pod type.
PodType = "pod"
// VolumeType is the volume type
VolumeType = "volume"
)
// AddInspectFlagSet takes a command and adds the inspect flags and returns an // AddInspectFlagSet takes a command and adds the inspect flags and returns an
// InspectOptions object. // InspectOptions object.
func AddInspectFlagSet(cmd *cobra.Command) *entities.InspectOptions { func AddInspectFlagSet(cmd *cobra.Command) *entities.InspectOptions {
@ -49,7 +34,7 @@ func AddInspectFlagSet(cmd *cobra.Command) *entities.InspectOptions {
_ = cmd.RegisterFlagCompletionFunc(formatFlagName, completion.AutocompleteNone) _ = cmd.RegisterFlagCompletionFunc(formatFlagName, completion.AutocompleteNone)
typeFlagName := "type" typeFlagName := "type"
flags.StringVarP(&opts.Type, typeFlagName, "t", AllType, fmt.Sprintf("Specify inspect-object type (%q, %q or %q)", ImageType, ContainerType, AllType)) flags.StringVarP(&opts.Type, typeFlagName, "t", common.AllType, "Specify inspect-object type")
_ = cmd.RegisterFlagCompletionFunc(typeFlagName, common.AutocompleteInspectType) _ = cmd.RegisterFlagCompletionFunc(typeFlagName, common.AutocompleteInspectType)
validate.AddLatestFlag(cmd, &opts.Latest) validate.AddLatestFlag(cmd, &opts.Latest)
@ -76,21 +61,22 @@ type inspector struct {
// newInspector creates a new inspector based on the specified options. // newInspector creates a new inspector based on the specified options.
func newInspector(options entities.InspectOptions) (*inspector, error) { func newInspector(options entities.InspectOptions) (*inspector, error) {
switch options.Type { switch options.Type {
case ImageType, ContainerType, AllType, PodType, NetworkType, VolumeType: case common.ImageType, common.ContainerType, common.AllType, common.PodType, common.NetworkType, common.VolumeType:
// Valid types. // Valid types.
default: default:
return nil, errors.Errorf("invalid type %q: must be %q, %q, %q, %q, %q, or %q", options.Type, ImageType, ContainerType, PodType, NetworkType, VolumeType, AllType) return nil, errors.Errorf("invalid type %q: must be %q, %q, %q, %q, %q, or %q", options.Type,
common.ImageType, common.ContainerType, common.PodType, common.NetworkType, common.VolumeType, common.AllType)
} }
if options.Type == ImageType { if options.Type == common.ImageType {
if options.Latest { if options.Latest {
return nil, errors.Errorf("latest is not supported for type %q", ImageType) return nil, errors.Errorf("latest is not supported for type %q", common.ImageType)
} }
if options.Size { if options.Size {
return nil, errors.Errorf("size is not supported for type %q", ImageType) return nil, errors.Errorf("size is not supported for type %q", common.ImageType)
} }
} }
if options.Type == PodType && options.Size { if options.Type == common.PodType && options.Size {
return nil, errors.Errorf("size is not supported for type %q", PodType) return nil, errors.Errorf("size is not supported for type %q", common.PodType)
} }
podOpts := entities.PodInspectOptions{ podOpts := entities.PodInspectOptions{
Latest: options.Latest, Latest: options.Latest,
@ -122,21 +108,21 @@ func (i *inspector) inspect(namesOrIDs []string) error {
if len(namesOrIDs) > 0 { if len(namesOrIDs) > 0 {
return errors.New("--latest and arguments cannot be used together") return errors.New("--latest and arguments cannot be used together")
} }
if i.options.Type == AllType { if i.options.Type == common.AllType {
tmpType = ContainerType // -l works with --type=all, defaults to containertype tmpType = common.ContainerType // -l works with --type=all, defaults to containertype
} }
} }
// Inspect - note that AllType requires us to expensively query one-by-one. // Inspect - note that AllType requires us to expensively query one-by-one.
switch tmpType { switch tmpType {
case AllType: case common.AllType:
allData, allErrs, err := i.inspectAll(ctx, namesOrIDs) allData, allErrs, err := i.inspectAll(ctx, namesOrIDs)
if err != nil { if err != nil {
return err return err
} }
data = allData data = allData
errs = allErrs errs = allErrs
case ImageType: case common.ImageType:
imgData, allErrs, err := i.imageEngine.Inspect(ctx, namesOrIDs, i.options) imgData, allErrs, err := i.imageEngine.Inspect(ctx, namesOrIDs, i.options)
if err != nil { if err != nil {
return err return err
@ -145,7 +131,7 @@ func (i *inspector) inspect(namesOrIDs []string) error {
for i := range imgData { for i := range imgData {
data = append(data, imgData[i]) data = append(data, imgData[i])
} }
case ContainerType: case common.ContainerType:
ctrData, allErrs, err := i.containerEngine.ContainerInspect(ctx, namesOrIDs, i.options) ctrData, allErrs, err := i.containerEngine.ContainerInspect(ctx, namesOrIDs, i.options)
if err != nil { if err != nil {
return err return err
@ -154,7 +140,7 @@ func (i *inspector) inspect(namesOrIDs []string) error {
for i := range ctrData { for i := range ctrData {
data = append(data, ctrData[i]) data = append(data, ctrData[i])
} }
case PodType: case common.PodType:
for _, pod := range namesOrIDs { for _, pod := range namesOrIDs {
i.podOptions.NameOrID = pod i.podOptions.NameOrID = pod
podData, err := i.containerEngine.PodInspect(ctx, i.podOptions) podData, err := i.containerEngine.PodInspect(ctx, i.podOptions)
@ -184,7 +170,7 @@ func (i *inspector) inspect(namesOrIDs []string) error {
data = append(data, podData) data = append(data, podData)
} }
} }
case NetworkType: case common.NetworkType:
networkData, allErrs, err := registry.ContainerEngine().NetworkInspect(ctx, namesOrIDs, i.options) networkData, allErrs, err := registry.ContainerEngine().NetworkInspect(ctx, namesOrIDs, i.options)
if err != nil { if err != nil {
return err return err
@ -193,7 +179,7 @@ func (i *inspector) inspect(namesOrIDs []string) error {
for i := range networkData { for i := range networkData {
data = append(data, networkData[i]) data = append(data, networkData[i])
} }
case VolumeType: case common.VolumeType:
volumeData, allErrs, err := i.containerEngine.VolumeInspect(ctx, namesOrIDs, i.options) volumeData, allErrs, err := i.containerEngine.VolumeInspect(ctx, namesOrIDs, i.options)
if err != nil { if err != nil {
return err return err
@ -203,7 +189,8 @@ func (i *inspector) inspect(namesOrIDs []string) error {
data = append(data, volumeData[i]) data = append(data, volumeData[i])
} }
default: default:
return errors.Errorf("invalid type %q: must be %q, %q, %q, %q, %q, or %q", i.options.Type, ImageType, ContainerType, PodType, NetworkType, VolumeType, AllType) return errors.Errorf("invalid type %q: must be %q, %q, %q, %q, %q, or %q", i.options.Type,
common.ImageType, common.ContainerType, common.PodType, common.NetworkType, common.VolumeType, common.AllType)
} }
// Always print an empty array // Always print an empty array
if data == nil { if data == nil {

View File

@ -37,6 +37,6 @@ func init() {
} }
func networkInspect(_ *cobra.Command, args []string) error { func networkInspect(_ *cobra.Command, args []string) error {
inspectOpts.Type = inspect.NetworkType inspectOpts.Type = common.NetworkType
return inspect.Inspect(args, *inspectOpts) return inspect.Inspect(args, *inspectOpts)
} }

View File

@ -6,7 +6,6 @@ import (
"github.com/containers/common/pkg/completion" "github.com/containers/common/pkg/completion"
"github.com/containers/podman/v4/cmd/podman/common" "github.com/containers/podman/v4/cmd/podman/common"
"github.com/containers/podman/v4/cmd/podman/inspect"
"github.com/containers/podman/v4/cmd/podman/registry" "github.com/containers/podman/v4/cmd/podman/registry"
"github.com/containers/podman/v4/pkg/domain/entities" "github.com/containers/podman/v4/pkg/domain/entities"
"github.com/containers/podman/v4/utils" "github.com/containers/podman/v4/utils"
@ -58,7 +57,7 @@ func export(cmd *cobra.Command, args []string) error {
if cliExportOpts.Output == "" { if cliExportOpts.Output == "" {
return errors.New("expects output path, use --output=[path]") return errors.New("expects output path, use --output=[path]")
} }
inspectOpts.Type = inspect.VolumeType inspectOpts.Type = common.VolumeType
volumeData, _, err := containerEngine.VolumeInspect(ctx, args, inspectOpts) volumeData, _, err := containerEngine.VolumeInspect(ctx, args, inspectOpts)
if err != nil { if err != nil {
return err return err

View File

@ -5,7 +5,6 @@ import (
"os" "os"
"github.com/containers/podman/v4/cmd/podman/common" "github.com/containers/podman/v4/cmd/podman/common"
"github.com/containers/podman/v4/cmd/podman/inspect"
"github.com/containers/podman/v4/cmd/podman/parse" "github.com/containers/podman/v4/cmd/podman/parse"
"github.com/containers/podman/v4/cmd/podman/registry" "github.com/containers/podman/v4/cmd/podman/registry"
"github.com/containers/podman/v4/pkg/domain/entities" "github.com/containers/podman/v4/pkg/domain/entities"
@ -60,7 +59,7 @@ func importVol(cmd *cobra.Command, args []string) error {
tarFile = os.Stdin tarFile = os.Stdin
} }
inspectOpts.Type = inspect.VolumeType inspectOpts.Type = common.VolumeType
volumeData, _, err := containerEngine.VolumeInspect(ctx, volumes, inspectOpts) volumeData, _, err := containerEngine.VolumeInspect(ctx, volumes, inspectOpts)
if err != nil { if err != nil {
return err return err

View File

@ -48,6 +48,6 @@ func volumeInspect(cmd *cobra.Command, args []string) error {
if (inspectOpts.All && len(args) > 0) || (!inspectOpts.All && len(args) < 1) { if (inspectOpts.All && len(args) > 0) || (!inspectOpts.All && len(args) < 1) {
return errors.New("provide one or more volume names or use --all") return errors.New("provide one or more volume names or use --all")
} }
inspectOpts.Type = inspect.VolumeType inspectOpts.Type = common.VolumeType
return inspect.Inspect(args, *inspectOpts) return inspect.Inspect(args, *inspectOpts)
} }