summaryrefslogtreecommitdiff
path: root/cmd/podman/validate/args.go
diff options
context:
space:
mode:
authorJhon Honce <jhonce@redhat.com>2020-06-22 14:29:04 -0700
committerJhon Honce <jhonce@redhat.com>2020-06-26 17:09:24 -0700
commit6fb5f01c736d5cbf11bc7eaad09f6f0c7fd1d0d4 (patch)
treeab64703869f9300d486531f5781d825e2d9aaec7 /cmd/podman/validate/args.go
parent673116c063f173ae7ff799a920f9c1ca28194b9d (diff)
downloadpodman-6fb5f01c736d5cbf11bc7eaad09f6f0c7fd1d0d4.tar.gz
podman-6fb5f01c736d5cbf11bc7eaad09f6f0c7fd1d0d4.tar.bz2
podman-6fb5f01c736d5cbf11bc7eaad09f6f0c7fd1d0d4.zip
Fixes --remote flag issues
* --remote, --url and --identity are now anchored to podman command. Subcommands should no longer have issues * TraverseChildren now set to V1 expectations * Latest flag now has helper function. Now has consistent usage. * IsRemote() uses cobra parser to determin if --remote is given * Moved validation functions from parser pkg to validate pkg * Fixes #6598 Fixes #6704 Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'cmd/podman/validate/args.go')
-rw-r--r--cmd/podman/validate/args.go116
1 files changed, 114 insertions, 2 deletions
diff --git a/cmd/podman/validate/args.go b/cmd/podman/validate/args.go
index d170447ee..a33f47959 100644
--- a/cmd/podman/validate/args.go
+++ b/cmd/podman/validate/args.go
@@ -2,6 +2,7 @@ package validate
import (
"fmt"
+ "strconv"
"github.com/pkg/errors"
"github.com/spf13/cobra"
@@ -28,8 +29,119 @@ func IDOrLatestArgs(cmd *cobra.Command, args []string) error {
if len(args) > 1 {
return fmt.Errorf("`%s` accepts at most one argument", cmd.CommandPath())
}
- if len(args) == 0 && !cmd.Flag("latest").Changed {
- return fmt.Errorf("`%s` requires a name, id, or the \"--latest\" flag", cmd.CommandPath())
+
+ latest := cmd.Flag("latest")
+ if latest != nil {
+ given, _ := strconv.ParseBool(cmd.Flag("latest").Value.String())
+ if len(args) == 0 && !given {
+ return fmt.Errorf("%q requires a name, id, or the \"--latest\" flag", cmd.CommandPath())
+ }
+ }
+ return nil
+}
+
+// TODO: the two functions CheckAllLatestAndCIDFile and CheckAllLatestAndPodIDFile are almost identical.
+// It may be worth looking into generalizing the two a bit more and share code but time is scarce and
+// we only live once.
+
+// CheckAllLatestAndCIDFile checks that --all and --latest are used correctly.
+// If cidfile is set, also check for the --cidfile flag.
+func CheckAllLatestAndCIDFile(c *cobra.Command, args []string, ignoreArgLen bool, cidfile bool) error {
+ argLen := len(args)
+ if c.Flags().Lookup("all") == nil || c.Flags().Lookup("latest") == nil {
+ if !cidfile {
+ return errors.New("unable to lookup values for 'latest' or 'all'")
+ } else if c.Flags().Lookup("cidfile") == nil {
+ return errors.New("unable to lookup values for 'latest', 'all' or 'cidfile'")
+ }
+ }
+
+ specifiedAll, _ := c.Flags().GetBool("all")
+ specifiedLatest, _ := c.Flags().GetBool("latest")
+ specifiedCIDFile := false
+ if cid, _ := c.Flags().GetStringArray("cidfile"); len(cid) > 0 {
+ specifiedCIDFile = true
+ }
+
+ if specifiedCIDFile && (specifiedAll || specifiedLatest) {
+ return errors.Errorf("--all, --latest and --cidfile cannot be used together")
+ } else if specifiedAll && specifiedLatest {
+ return errors.Errorf("--all and --latest cannot be used together")
+ }
+
+ if (argLen > 0) && specifiedAll {
+ return errors.Errorf("no arguments are needed with --all")
+ }
+
+ if ignoreArgLen {
+ return nil
+ }
+
+ if argLen > 0 {
+ if specifiedLatest {
+ return errors.Errorf("no arguments are needed with --latest")
+ } else if cidfile && (specifiedLatest || specifiedCIDFile) {
+ return errors.Errorf("no arguments are needed with --latest or --cidfile")
+ }
+ }
+
+ if specifiedCIDFile {
+ return nil
+ }
+
+ if argLen < 1 && !specifiedAll && !specifiedLatest && !specifiedCIDFile {
+ return errors.Errorf("you must provide at least one name or id")
+ }
+ return nil
+}
+
+// CheckAllLatestAndPodIDFile checks that --all and --latest are used correctly.
+// If withIDFile is set, also check for the --pod-id-file flag.
+func CheckAllLatestAndPodIDFile(c *cobra.Command, args []string, ignoreArgLen bool, withIDFile bool) error {
+ argLen := len(args)
+ if c.Flags().Lookup("all") == nil || c.Flags().Lookup("latest") == nil {
+ if !withIDFile {
+ return errors.New("unable to lookup values for 'latest' or 'all'")
+ } else if c.Flags().Lookup("pod-id-file") == nil {
+ return errors.New("unable to lookup values for 'latest', 'all' or 'pod-id-file'")
+ }
+ }
+
+ specifiedAll, _ := c.Flags().GetBool("all")
+ specifiedLatest, _ := c.Flags().GetBool("latest")
+ specifiedPodIDFile := false
+ if pid, _ := c.Flags().GetStringArray("pod-id-file"); len(pid) > 0 {
+ specifiedPodIDFile = true
+ }
+
+ if specifiedPodIDFile && (specifiedAll || specifiedLatest) {
+ return errors.Errorf("--all, --latest and --pod-id-file cannot be used together")
+ } else if specifiedAll && specifiedLatest {
+ return errors.Errorf("--all and --latest cannot be used together")
+ }
+
+ if (argLen > 0) && specifiedAll {
+ return errors.Errorf("no arguments are needed with --all")
+ }
+
+ if ignoreArgLen {
+ return nil
+ }
+
+ if argLen > 0 {
+ if specifiedLatest {
+ return errors.Errorf("no arguments are needed with --latest")
+ } else if withIDFile && (specifiedLatest || specifiedPodIDFile) {
+ return errors.Errorf("no arguments are needed with --latest or --pod-id-file")
+ }
+ }
+
+ if specifiedPodIDFile {
+ return nil
+ }
+
+ if argLen < 1 && !specifiedAll && !specifiedLatest && !specifiedPodIDFile {
+ return errors.Errorf("you must provide at least one name or id")
}
return nil
}