Ensure that image/container inspect are specialized

We are currently able to inspect images with
`podman container inspect` and containers with
`podman image inspect` and neither of those seem correct. This
ensures that the appropriate flags, and only the appropriate
flags, are available for each specialized exec, and they can only
inspect the specific type they were intended to.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
Matthew Heon
2020-06-03 14:25:45 -04:00
parent cbfb4980ce
commit d505989b0e
3 changed files with 55 additions and 3 deletions

View File

@ -26,9 +26,15 @@ func init() {
Command: inspectCmd, Command: inspectCmd,
Parent: containerCmd, Parent: containerCmd,
}) })
inspectOpts = inspect.AddInspectFlagSet(inspectCmd) inspectOpts = new(entities.InspectOptions)
flags := inspectCmd.Flags()
flags.BoolVarP(&inspectOpts.Size, "size", "s", false, "Display total file size")
flags.StringVarP(&inspectOpts.Format, "format", "f", "json", "Format the output to a Go template or json")
flags.BoolVarP(&inspectOpts.Latest, "latest", "l", false, "Act on the latest container Podman is aware of")
} }
func inspectExec(cmd *cobra.Command, args []string) error { func inspectExec(cmd *cobra.Command, args []string) error {
// Force container type
inspectOpts.Type = inspect.ContainerType
return inspect.Inspect(args, *inspectOpts) return inspect.Inspect(args, *inspectOpts)
} }

View File

@ -27,11 +27,12 @@ func init() {
Command: inspectCmd, Command: inspectCmd,
Parent: imageCmd, Parent: imageCmd,
}) })
inspectOpts = inspect.AddInspectFlagSet(inspectCmd) inspectOpts = new(entities.InspectOptions)
flags := inspectCmd.Flags() flags := inspectCmd.Flags()
_ = flags.MarkHidden("latest") // Shared with container-inspect but not wanted here. flags.StringVarP(&inspectOpts.Format, "format", "f", "json", "Format the output to a Go template or json")
} }
func inspectExec(cmd *cobra.Command, args []string) error { func inspectExec(cmd *cobra.Command, args []string) error {
inspectOpts.Type = inspect.ImageType
return inspect.Inspect(args, *inspectOpts) return inspect.Inspect(args, *inspectOpts)
} }

View File

@ -179,4 +179,49 @@ var _ = Describe("Podman inspect", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Not(Equal(0))) Expect(session.ExitCode()).To(Not(Equal(0)))
}) })
It("podman [image,container] inspect on image", func() {
baseInspect := podmanTest.Podman([]string{"inspect", ALPINE})
baseInspect.WaitWithDefaultTimeout()
Expect(baseInspect.ExitCode()).To(Equal(0))
baseJSON := baseInspect.InspectImageJSON()
Expect(len(baseJSON)).To(Equal(1))
ctrInspect := podmanTest.Podman([]string{"container", "inspect", ALPINE})
ctrInspect.WaitWithDefaultTimeout()
Expect(ctrInspect.ExitCode()).To(Not(Equal(0)))
imageInspect := podmanTest.Podman([]string{"image", "inspect", ALPINE})
imageInspect.WaitWithDefaultTimeout()
Expect(imageInspect.ExitCode()).To(Equal(0))
imageJSON := imageInspect.InspectImageJSON()
Expect(len(imageJSON)).To(Equal(1))
Expect(baseJSON[0].ID).To(Equal(imageJSON[0].ID))
})
It("podman [image, container] inspect on container", func() {
ctrName := "testCtr"
create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"})
create.WaitWithDefaultTimeout()
Expect(create.ExitCode()).To(Equal(0))
baseInspect := podmanTest.Podman([]string{"inspect", ctrName})
baseInspect.WaitWithDefaultTimeout()
Expect(baseInspect.ExitCode()).To(Equal(0))
baseJSON := baseInspect.InspectContainerToJSON()
Expect(len(baseJSON)).To(Equal(1))
ctrInspect := podmanTest.Podman([]string{"container", "inspect", ctrName})
ctrInspect.WaitWithDefaultTimeout()
Expect(ctrInspect.ExitCode()).To(Equal(0))
ctrJSON := ctrInspect.InspectContainerToJSON()
Expect(len(ctrJSON)).To(Equal(1))
imageInspect := podmanTest.Podman([]string{"image", "inspect", ctrName})
imageInspect.WaitWithDefaultTimeout()
Expect(imageInspect.ExitCode()).To(Not(Equal(0)))
Expect(baseJSON[0].ID).To(Equal(ctrJSON[0].ID))
})
}) })