diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2022-08-11 00:35:35 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-11 00:35:35 +0000 |
commit | edb3f70bccd2eae14ddd95c74db35731b508f407 (patch) | |
tree | 51e82489a9398d2378011cda7889137c912cdaad /cmd | |
parent | b53eccfc2adea661e4e4b48b59d4e3f8d3d4883a (diff) | |
parent | eba1f77497efb48d810d3c2d2fa6cccecea695cb (diff) | |
download | podman-edb3f70bccd2eae14ddd95c74db35731b508f407.tar.gz podman-edb3f70bccd2eae14ddd95c74db35731b508f407.tar.bz2 podman-edb3f70bccd2eae14ddd95c74db35731b508f407.zip |
Merge pull request #15279 from mheon/bump_420_final
Final Backports and Bump to v4.2.0
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/podman/containers/create.go | 16 | ||||
-rw-r--r-- | cmd/podman/containers/restore.go | 51 | ||||
-rw-r--r-- | cmd/podman/containers/rm.go | 6 | ||||
-rw-r--r-- | cmd/podman/containers/start.go | 20 | ||||
-rw-r--r-- | cmd/podman/images/rm.go | 18 | ||||
-rw-r--r-- | cmd/podman/networks/rm.go | 6 | ||||
-rw-r--r-- | cmd/podman/pods/rm.go | 7 | ||||
-rw-r--r-- | cmd/podman/system/info.go | 1 | ||||
-rw-r--r-- | cmd/podman/volumes/rm.go | 6 |
9 files changed, 92 insertions, 39 deletions
diff --git a/cmd/podman/containers/create.go b/cmd/podman/containers/create.go index 7d0f4d9ae..455127fd7 100644 --- a/cmd/podman/containers/create.go +++ b/cmd/podman/containers/create.go @@ -192,16 +192,14 @@ func replaceContainer(name string) error { } func CreateInit(c *cobra.Command, vals entities.ContainerCreateOptions, isInfra bool) (entities.ContainerCreateOptions, error) { - vals.UserNS = c.Flag("userns").Value.String() - // if user did not modify --userns flag and did turn on - // uid/gid mappings, set userns flag to "private" - if !c.Flag("userns").Changed && vals.UserNS == "host" { - if len(vals.UIDMap) > 0 || - len(vals.GIDMap) > 0 || - vals.SubUIDName != "" || - vals.SubGIDName != "" { - vals.UserNS = "private" + if len(vals.UIDMap) > 0 || len(vals.GIDMap) > 0 || vals.SubUIDName != "" || vals.SubGIDName != "" { + if c.Flag("userns").Changed { + return vals, errors.New("--userns and --uidmap/--gidmap/--subuidname/--subgidname are mutually exclusive") } + // force userns flag to "private" + vals.UserNS = "private" + } else { + vals.UserNS = c.Flag("userns").Value.String() } if c.Flag("kernel-memory") != nil && c.Flag("kernel-memory").Changed { logrus.Warnf("The --kernel-memory flag is no longer supported. This flag is a noop.") diff --git a/cmd/podman/containers/restore.go b/cmd/podman/containers/restore.go index 1e4745354..6106f2bed 100644 --- a/cmd/podman/containers/restore.go +++ b/cmd/podman/containers/restore.go @@ -93,32 +93,49 @@ func init() { } func restore(cmd *cobra.Command, args []string) error { - var errs utils.OutputErrors + var ( + e error + errs utils.OutputErrors + ) podmanStart := time.Now() if rootless.IsRootless() { return fmt.Errorf("restoring a container requires root") } - // Find out if this is an image - inspectOpts := entities.InspectOptions{} - imgData, _, err := registry.ImageEngine().Inspect(context.Background(), args, inspectOpts) - if err != nil { - return err + // Check if the container exists (#15055) + exists := &entities.BoolReport{Value: false} + for _, ctr := range args { + exists, e = registry.ContainerEngine().ContainerExists(registry.GetContext(), ctr, entities.ContainerExistsOptions{}) + if e != nil { + return e + } + if exists.Value { + break + } } - hostInfo, err := registry.ContainerEngine().Info(context.Background()) - if err != nil { - return err - } + if !exists.Value { + // Find out if this is an image + inspectOpts := entities.InspectOptions{} + imgData, _, err := registry.ImageEngine().Inspect(context.Background(), args, inspectOpts) + if err != nil { + return err + } - for i := range imgData { - restoreOptions.CheckpointImage = true - checkpointRuntimeName, found := imgData[i].Annotations[define.CheckpointAnnotationRuntimeName] - if !found { - return fmt.Errorf("image is not a checkpoint: %s", imgData[i].ID) + hostInfo, err := registry.ContainerEngine().Info(context.Background()) + if err != nil { + return err } - if hostInfo.Host.OCIRuntime.Name != checkpointRuntimeName { - return fmt.Errorf("container image \"%s\" requires runtime: \"%s\"", imgData[i].ID, checkpointRuntimeName) + + for i := range imgData { + restoreOptions.CheckpointImage = true + checkpointRuntimeName, found := imgData[i].Annotations[define.CheckpointAnnotationRuntimeName] + if !found { + return fmt.Errorf("image is not a checkpoint: %s", imgData[i].ID) + } + if hostInfo.Host.OCIRuntime.Name != checkpointRuntimeName { + return fmt.Errorf("container image \"%s\" requires runtime: \"%s\"", imgData[i].ID, checkpointRuntimeName) + } } } diff --git a/cmd/podman/containers/rm.go b/cmd/podman/containers/rm.go index 9fa688d23..056e32651 100644 --- a/cmd/podman/containers/rm.go +++ b/cmd/podman/containers/rm.go @@ -126,6 +126,9 @@ func removeContainers(namesOrIDs []string, rmOptions entities.RmOptions, setExit var errs utils.OutputErrors responses, err := registry.ContainerEngine().ContainerRm(context.Background(), namesOrIDs, rmOptions) if err != nil { + if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchCtr.Error()) { + return nil + } if setExit { setExitCode(err) } @@ -136,6 +139,9 @@ func removeContainers(namesOrIDs []string, rmOptions entities.RmOptions, setExit if errors.Is(r.Err, define.ErrWillDeadlock) { logrus.Errorf("Potential deadlock detected - please run 'podman system renumber' to resolve") } + if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchCtr.Error()) { + continue + } if setExit { setExitCode(r.Err) } diff --git a/cmd/podman/containers/start.go b/cmd/podman/containers/start.go index cd4fa17b8..fc3488e0c 100644 --- a/cmd/podman/containers/start.go +++ b/cmd/podman/containers/start.go @@ -59,8 +59,10 @@ func startFlags(cmd *cobra.Command) { flags.BoolVarP(&startOptions.Interactive, "interactive", "i", false, "Keep STDIN open even if not attached") flags.BoolVar(&startOptions.SigProxy, "sig-proxy", false, "Proxy received signals to the process (default true if attaching, false otherwise)") - flags.StringSliceVarP(&filters, "filter", "f", []string{}, "Filter output based on conditions given") - _ = cmd.RegisterFlagCompletionFunc("filter", common.AutocompletePsFilters) + + filterFlagName := "filter" + flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given") + _ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters) flags.BoolVar(&startOptions.All, "all", false, "Start all containers regardless of their state or configuration") @@ -84,7 +86,7 @@ func init() { } func validateStart(cmd *cobra.Command, args []string) error { - if len(args) == 0 && !startOptions.Latest && !startOptions.All { + if len(args) == 0 && !startOptions.Latest && !startOptions.All && len(filters) < 1 { return errors.New("start requires at least one argument") } if startOptions.All && startOptions.Latest { @@ -123,14 +125,12 @@ func start(cmd *cobra.Command, args []string) error { } containers := args - if len(filters) > 0 { - for _, f := range filters { - split := strings.SplitN(f, "=", 2) - if len(split) == 1 { - return fmt.Errorf("invalid filter %q", f) - } - startOptions.Filters[split[0]] = append(startOptions.Filters[split[0]], split[1]) + for _, f := range filters { + split := strings.SplitN(f, "=", 2) + if len(split) < 2 { + return fmt.Errorf("invalid filter %q", f) } + startOptions.Filters[split[0]] = append(startOptions.Filters[split[0]], split[1]) } responses, err := registry.ContainerEngine().ContainerStart(registry.GetContext(), containers, startOptions) diff --git a/cmd/podman/images/rm.go b/cmd/podman/images/rm.go index 18b22e51d..d3fd17440 100644 --- a/cmd/podman/images/rm.go +++ b/cmd/podman/images/rm.go @@ -3,11 +3,14 @@ package images import ( "errors" "fmt" + "strings" "github.com/containers/podman/v4/cmd/podman/common" "github.com/containers/podman/v4/cmd/podman/registry" + "github.com/containers/podman/v4/cmd/podman/utils" "github.com/containers/podman/v4/pkg/domain/entities" "github.com/containers/podman/v4/pkg/errorhandling" + "github.com/containers/storage/types" "github.com/spf13/cobra" "github.com/spf13/pflag" ) @@ -81,8 +84,19 @@ func rm(cmd *cobra.Command, args []string) error { fmt.Println("Deleted: " + d) } } - registry.SetExitCode(report.ExitCode) + for _, err := range rmErrors { + if !imageOpts.Force || !strings.Contains(err.Error(), types.ErrImageUnknown.Error()) { + registry.SetExitCode(report.ExitCode) + } + } } - return errorhandling.JoinErrors(rmErrors) + var errs utils.OutputErrors + for _, err := range rmErrors { + if imageOpts.Force && strings.Contains(err.Error(), types.ErrImageUnknown.Error()) { + continue + } + errs = append(errs, err) + } + return errorhandling.JoinErrors(errs) } diff --git a/cmd/podman/networks/rm.go b/cmd/podman/networks/rm.go index c2d3f655f..d734b2867 100644 --- a/cmd/podman/networks/rm.go +++ b/cmd/podman/networks/rm.go @@ -63,6 +63,9 @@ func networkRm(cmd *cobra.Command, args []string) error { } responses, err := registry.ContainerEngine().NetworkRm(registry.Context(), args, networkRmOptions) if err != nil { + if networkRmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchNetwork.Error()) { + return nil + } setExitCode(err) return err } @@ -70,6 +73,9 @@ func networkRm(cmd *cobra.Command, args []string) error { if r.Err == nil { fmt.Println(r.Name) } else { + if networkRmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchNetwork.Error()) { + continue + } setExitCode(r.Err) errs = append(errs, r.Err) } diff --git a/cmd/podman/pods/rm.go b/cmd/podman/pods/rm.go index 2ffd968f9..0aa64481d 100644 --- a/cmd/podman/pods/rm.go +++ b/cmd/podman/pods/rm.go @@ -93,6 +93,9 @@ func removePods(namesOrIDs []string, rmOptions entities.PodRmOptions, printIDs b responses, err := registry.ContainerEngine().PodRm(context.Background(), namesOrIDs, rmOptions) if err != nil { + if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) { + return nil + } setExitCode(err) return err } @@ -104,13 +107,15 @@ func removePods(namesOrIDs []string, rmOptions entities.PodRmOptions, printIDs b fmt.Println(r.Id) } } else { + if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchPod.Error()) { + continue + } setExitCode(r.Err) errs = append(errs, r.Err) } } return errs.PrintErrors() } - func setExitCode(err error) { if errors.Is(err, define.ErrNoSuchPod) || strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) { registry.SetExitCode(1) diff --git a/cmd/podman/system/info.go b/cmd/podman/system/info.go index f8fd946cd..296fa4def 100644 --- a/cmd/podman/system/info.go +++ b/cmd/podman/system/info.go @@ -63,6 +63,7 @@ func infoFlags(cmd *cobra.Command) { flags := cmd.Flags() flags.BoolVarP(&debug, "debug", "D", false, "Display additional debug information") + _ = flags.MarkHidden("debug") // It's a NOP since Podman version 2.0 formatFlagName := "format" flags.StringVarP(&inFormat, formatFlagName, "f", "", "Change the output format to JSON or a Go template") diff --git a/cmd/podman/volumes/rm.go b/cmd/podman/volumes/rm.go index c160b8623..1383da279 100644 --- a/cmd/podman/volumes/rm.go +++ b/cmd/podman/volumes/rm.go @@ -65,6 +65,9 @@ func rm(cmd *cobra.Command, args []string) error { } responses, err := registry.ContainerEngine().VolumeRm(context.Background(), args, rmOptions) if err != nil { + if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchVolume.Error()) { + return nil + } setExitCode(err) return err } @@ -72,6 +75,9 @@ func rm(cmd *cobra.Command, args []string) error { if r.Err == nil { fmt.Println(r.Id) } else { + if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchVolume.Error()) { + continue + } setExitCode(r.Err) errs = append(errs, r.Err) } |