diff --git a/cmd/podman/manifest/push.go b/cmd/podman/manifest/push.go index a2d1eba8f6..e61170333f 100644 --- a/cmd/podman/manifest/push.go +++ b/cmd/podman/manifest/push.go @@ -36,7 +36,7 @@ var ( Long: "Pushes manifest lists and image indexes to registries.", RunE: push, Example: `podman manifest push mylist:v1.11 docker://quay.io/myuser/image:v1.11`, - Args: cobra.ExactArgs(2), + Args: cobra.RangeArgs(1, 2), ValidArgsFunction: common.AutocompleteImages, } ) @@ -114,7 +114,7 @@ func push(cmd *cobra.Command, args []string) error { return err } listImageSpec := args[0] - destSpec := args[1] + destSpec := args[len(args)-1] if listImageSpec == "" { return fmt.Errorf(`invalid image name "%s"`, listImageSpec) } @@ -155,7 +155,7 @@ func push(cmd *cobra.Command, args []string) error { } manifestPushOpts.SkipTLSVerify = types.NewOptionalBool(manifestPushOpts.Insecure) } - digest, err := registry.ImageEngine().ManifestPush(registry.Context(), args[0], args[1], manifestPushOpts.ImagePushOptions) + digest, err := registry.ImageEngine().ManifestPush(registry.Context(), listImageSpec, destSpec, manifestPushOpts.ImagePushOptions) if err != nil { return err } diff --git a/test/e2e/manifest_test.go b/test/e2e/manifest_test.go index 5288e13981..2da82b9c9c 100644 --- a/test/e2e/manifest_test.go +++ b/test/e2e/manifest_test.go @@ -46,7 +46,7 @@ var _ = Describe("Podman manifest", func() { f := CurrentGinkgoTestDescription() processTestResult(f) }) - It("create w/o image", func() { + It("create w/o image and attempt push w/o dest", func() { for _, amend := range []string{"--amend", "-a"} { session := podmanTest.Podman([]string{"manifest", "create", "foo"}) session.WaitWithDefaultTimeout() @@ -56,6 +56,13 @@ var _ = Describe("Podman manifest", func() { session.WaitWithDefaultTimeout() Expect(session).To(ExitWithError()) + session = podmanTest.Podman([]string{"manifest", "push", "--all", "foo"}) + session.WaitWithDefaultTimeout() + Expect(session).To(ExitWithError()) + // Push should actually fail since its not valid registry + Expect(session.ErrorToString()).To(ContainSubstring("requested access to the resource is denied")) + Expect(session.OutputToString()).To(Not(ContainSubstring("accepts 2 arg(s), received 1"))) + session = podmanTest.Podman([]string{"manifest", "create", amend, "foo"}) session.WaitWithDefaultTimeout() Expect(session).Should(Exit(0)) diff --git a/test/e2e/push_test.go b/test/e2e/push_test.go index 9b761a8e9e..06a17ec930 100644 --- a/test/e2e/push_test.go +++ b/test/e2e/push_test.go @@ -313,6 +313,16 @@ var _ = Describe("Podman push", func() { push.WaitWithDefaultTimeout() Expect(push).Should(Exit(0)) Expect(push.ErrorToString()).To(ContainSubstring("Writing manifest to image destination")) + + // create and push manifest + session = podmanTest.Podman([]string{"manifest", "create", "localhost:5000/manifesttest"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"manifest", "push", "--creds=podmantest:test", "--tls-verify=false", "--all", "localhost:5000/manifesttest"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + Expect(session.ErrorToString()).To(ContainSubstring("Writing manifest list to image destination")) }) It("podman push and encrypt to oci", func() {