summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/podman/common/specgen.go2
-rw-r--r--cmd/podman/containers/create.go48
-rw-r--r--cmd/podman/containers/run.go9
-rw-r--r--cmd/podman/healthcheck/run.go13
-rw-r--r--cmd/podman/images/tag.go22
-rw-r--r--cmd/podman/images/untag.go22
-rw-r--r--cmd/podman/manifest/inspect.go13
-rw-r--r--cmd/podman/manifest/remove.go13
-rw-r--r--cmd/podman/system/renumber.go11
-rw-r--r--cmd/podman/system/unshare.go9
10 files changed, 96 insertions, 66 deletions
diff --git a/cmd/podman/common/specgen.go b/cmd/podman/common/specgen.go
index fef059958..1f6fbbe98 100644
--- a/cmd/podman/common/specgen.go
+++ b/cmd/podman/common/specgen.go
@@ -520,7 +520,7 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *ContainerCLIOpts, args []string
case "label":
// TODO selinux opts and label opts are the same thing
s.ContainerSecurityConfig.SelinuxOpts = append(s.ContainerSecurityConfig.SelinuxOpts, con[1])
- s.Annotations[define.InspectAnnotationLabel] = con[1]
+ s.Annotations[define.InspectAnnotationLabel] = strings.Join(s.ContainerSecurityConfig.SelinuxOpts, ",label=")
case "apparmor":
s.ContainerSecurityConfig.ApparmorProfile = con[1]
s.Annotations[define.InspectAnnotationApparmor] = con[1]
diff --git a/cmd/podman/containers/create.go b/cmd/podman/containers/create.go
index 45ce00c86..c48a739ff 100644
--- a/cmd/podman/containers/create.go
+++ b/cmd/podman/containers/create.go
@@ -6,11 +6,12 @@ import (
"os"
"strings"
- "github.com/containers/libpod/libpod/define"
-
"github.com/containers/common/pkg/config"
+ "github.com/containers/image/v5/storage"
+ "github.com/containers/image/v5/transports/alltransports"
"github.com/containers/libpod/cmd/podman/common"
"github.com/containers/libpod/cmd/podman/registry"
+ "github.com/containers/libpod/libpod/define"
"github.com/containers/libpod/pkg/domain/entities"
"github.com/containers/libpod/pkg/errorhandling"
"github.com/containers/libpod/pkg/specgen"
@@ -108,12 +109,15 @@ func create(cmd *cobra.Command, args []string) error {
return err
}
+ imageName := args[0]
if !cliVals.RootFS {
- if err := pullImage(args[0]); err != nil {
+ name, err := pullImage(args[0])
+ if err != nil {
return err
}
+ imageName = name
}
- s := specgen.NewSpecGenerator(args[0], cliVals.RootFS)
+ s := specgen.NewSpecGenerator(imageName, cliVals.RootFS)
if err := common.FillOutSpecGen(s, &cliVals, args); err != nil {
return err
}
@@ -211,30 +215,44 @@ func createInit(c *cobra.Command) error {
return nil
}
-func pullImage(imageName string) error {
- br, err := registry.ImageEngine().Exists(registry.GetContext(), imageName)
- if err != nil {
- return err
- }
+func pullImage(imageName string) (string, error) {
pullPolicy, err := config.ValidatePullPolicy(cliVals.Pull)
if err != nil {
- return err
+ return "", err
}
- if !br.Value || pullPolicy == config.PullImageAlways {
+
+ // Check if the image is missing and hence if we need to pull it.
+ imageMissing := true
+ imageRef, err := alltransports.ParseImageName(imageName)
+ switch {
+ case err != nil:
+ // Assume we specified a local image withouth the explicit storage transport.
+ fallthrough
+
+ case imageRef.Transport().Name() == storage.Transport.Name():
+ br, err := registry.ImageEngine().Exists(registry.GetContext(), imageName)
+ if err != nil {
+ return "", err
+ }
+ imageMissing = !br.Value
+ }
+
+ if imageMissing || pullPolicy == config.PullImageAlways {
if pullPolicy == config.PullImageNever {
- return errors.Wrapf(define.ErrNoSuchImage, "unable to find a name and tag match for %s in repotags", imageName)
+ return "", errors.Wrapf(define.ErrNoSuchImage, "unable to find a name and tag match for %s in repotags", imageName)
}
- _, pullErr := registry.ImageEngine().Pull(registry.GetContext(), imageName, entities.ImagePullOptions{
+ pullReport, pullErr := registry.ImageEngine().Pull(registry.GetContext(), imageName, entities.ImagePullOptions{
Authfile: cliVals.Authfile,
Quiet: cliVals.Quiet,
OverrideArch: cliVals.OverrideArch,
OverrideOS: cliVals.OverrideOS,
})
if pullErr != nil {
- return pullErr
+ return "", pullErr
}
+ imageName = pullReport.Images[0]
}
- return nil
+ return imageName, nil
}
func openCidFile(cidfile string) (*os.File, error) {
diff --git a/cmd/podman/containers/run.go b/cmd/podman/containers/run.go
index cb307c38f..4b287838e 100644
--- a/cmd/podman/containers/run.go
+++ b/cmd/podman/containers/run.go
@@ -125,10 +125,13 @@ func run(cmd *cobra.Command, args []string) error {
return err
}
+ imageName := args[0]
if !cliVals.RootFS {
- if err := pullImage(args[0]); err != nil {
+ name, err := pullImage(args[0])
+ if err != nil {
return err
}
+ imageName = name
}
if cliVals.Replace {
@@ -166,7 +169,7 @@ func run(cmd *cobra.Command, args []string) error {
runOpts.Detach = cliVals.Detach
runOpts.DetachKeys = cliVals.DetachKeys
cliVals.PreserveFDs = runOpts.PreserveFDs
- s := specgen.NewSpecGenerator(args[0], cliVals.RootFS)
+ s := specgen.NewSpecGenerator(imageName, cliVals.RootFS)
if err := common.FillOutSpecGen(s, &cliVals, args); err != nil {
return err
}
@@ -196,7 +199,7 @@ func run(cmd *cobra.Command, args []string) error {
return nil
}
if runRmi {
- _, rmErrors := registry.ImageEngine().Remove(registry.GetContext(), []string{args[0]}, entities.ImageRemoveOptions{})
+ _, rmErrors := registry.ImageEngine().Remove(registry.GetContext(), []string{imageName}, entities.ImageRemoveOptions{})
if len(rmErrors) > 0 {
logrus.Errorf("%s", errors.Wrapf(errorhandling.JoinErrors(rmErrors), "failed removing image"))
}
diff --git a/cmd/podman/healthcheck/run.go b/cmd/podman/healthcheck/run.go
index 5612910cb..17ddf17b6 100644
--- a/cmd/podman/healthcheck/run.go
+++ b/cmd/podman/healthcheck/run.go
@@ -12,12 +12,13 @@ import (
var (
healthcheckRunDescription = "run the health check of a container"
healthcheckrunCommand = &cobra.Command{
- Use: "run [flags] CONTAINER",
- Short: "run the health check of a container",
- Long: healthcheckRunDescription,
- Example: `podman healthcheck run mywebapp`,
- RunE: run,
- Args: cobra.ExactArgs(1),
+ Use: "run CONTAINER",
+ Short: "run the health check of a container",
+ Long: healthcheckRunDescription,
+ Example: `podman healthcheck run mywebapp`,
+ RunE: run,
+ Args: cobra.ExactArgs(1),
+ DisableFlagsInUseLine: true,
}
)
diff --git a/cmd/podman/images/tag.go b/cmd/podman/images/tag.go
index dae3416c4..859489552 100644
--- a/cmd/podman/images/tag.go
+++ b/cmd/podman/images/tag.go
@@ -9,22 +9,24 @@ import (
var (
tagDescription = "Adds one or more additional names to locally-stored image."
tagCommand = &cobra.Command{
- Use: "tag [flags] IMAGE TARGET_NAME [TARGET_NAME...]",
- Short: "Add an additional name to a local image",
- Long: tagDescription,
- RunE: tag,
- Args: cobra.MinimumNArgs(2),
+ Use: "tag IMAGE TARGET_NAME [TARGET_NAME...]",
+ Short: "Add an additional name to a local image",
+ Long: tagDescription,
+ RunE: tag,
+ Args: cobra.MinimumNArgs(2),
+ DisableFlagsInUseLine: true,
Example: `podman tag 0e3bbc2 fedora:latest
podman tag imageID:latest myNewImage:newTag
podman tag httpd myregistryhost:5000/fedora/httpd:v2`,
}
imageTagCommand = &cobra.Command{
- Args: tagCommand.Args,
- Use: tagCommand.Use,
- Short: tagCommand.Short,
- Long: tagCommand.Long,
- RunE: tagCommand.RunE,
+ Args: tagCommand.Args,
+ DisableFlagsInUseLine: true,
+ Use: tagCommand.Use,
+ Short: tagCommand.Short,
+ Long: tagCommand.Long,
+ RunE: tagCommand.RunE,
Example: `podman image tag 0e3bbc2 fedora:latest
podman image tag imageID:latest myNewImage:newTag
podman image tag httpd myregistryhost:5000/fedora/httpd:v2`,
diff --git a/cmd/podman/images/untag.go b/cmd/podman/images/untag.go
index 266a3f115..5d1274895 100644
--- a/cmd/podman/images/untag.go
+++ b/cmd/podman/images/untag.go
@@ -8,22 +8,24 @@ import (
var (
untagCommand = &cobra.Command{
- Use: "untag [flags] IMAGE [NAME...]",
- Short: "Remove a name from a local image",
- Long: "Removes one or more names from a locally-stored image.",
- RunE: untag,
- Args: cobra.MinimumNArgs(1),
+ Use: "untag IMAGE [NAME...]",
+ Short: "Remove a name from a local image",
+ Long: "Removes one or more names from a locally-stored image.",
+ RunE: untag,
+ Args: cobra.MinimumNArgs(1),
+ DisableFlagsInUseLine: true,
Example: `podman untag 0e3bbc2
podman untag imageID:latest otherImageName:latest
podman untag httpd myregistryhost:5000/fedora/httpd:v2`,
}
imageUntagCommand = &cobra.Command{
- Args: untagCommand.Args,
- Use: untagCommand.Use,
- Short: untagCommand.Short,
- Long: untagCommand.Long,
- RunE: untagCommand.RunE,
+ Args: untagCommand.Args,
+ DisableFlagsInUseLine: true,
+ Use: untagCommand.Use,
+ Short: untagCommand.Short,
+ Long: untagCommand.Long,
+ RunE: untagCommand.RunE,
Example: `podman image untag 0e3bbc2
podman image untag imageID:latest otherImageName:latest
podman image untag httpd myregistryhost:5000/fedora/httpd:v2`,
diff --git a/cmd/podman/manifest/inspect.go b/cmd/podman/manifest/inspect.go
index 5112aa5b2..861f4be4f 100644
--- a/cmd/podman/manifest/inspect.go
+++ b/cmd/podman/manifest/inspect.go
@@ -12,12 +12,13 @@ import (
var (
inspectCmd = &cobra.Command{
- Use: "inspect [flags] IMAGE",
- Short: "Display the contents of a manifest list or image index",
- Long: "Display the contents of a manifest list or image index.",
- RunE: inspect,
- Example: "podman manifest inspect localhost/list",
- Args: cobra.ExactArgs(1),
+ Use: "inspect IMAGE",
+ Short: "Display the contents of a manifest list or image index",
+ Long: "Display the contents of a manifest list or image index.",
+ RunE: inspect,
+ Example: "podman manifest inspect localhost/list",
+ Args: cobra.ExactArgs(1),
+ DisableFlagsInUseLine: true,
}
)
diff --git a/cmd/podman/manifest/remove.go b/cmd/podman/manifest/remove.go
index 4d345efc0..815a3f0a8 100644
--- a/cmd/podman/manifest/remove.go
+++ b/cmd/podman/manifest/remove.go
@@ -12,12 +12,13 @@ import (
var (
removeCmd = &cobra.Command{
- Use: "remove [flags] LIST IMAGE",
- Short: "Remove an entry from a manifest list or image index",
- Long: "Removes an image from a manifest list or image index.",
- RunE: remove,
- Example: `podman manifest remove mylist:v1.11 sha256:15352d97781ffdf357bf3459c037be3efac4133dc9070c2dce7eca7c05c3e736`,
- Args: cobra.ExactArgs(2),
+ Use: "remove LIST IMAGE",
+ Short: "Remove an entry from a manifest list or image index",
+ Long: "Removes an image from a manifest list or image index.",
+ RunE: remove,
+ Example: `podman manifest remove mylist:v1.11 sha256:15352d97781ffdf357bf3459c037be3efac4133dc9070c2dce7eca7c05c3e736`,
+ Args: cobra.ExactArgs(2),
+ DisableFlagsInUseLine: true,
}
)
diff --git a/cmd/podman/system/renumber.go b/cmd/podman/system/renumber.go
index b90640de3..39cd15dd7 100644
--- a/cmd/podman/system/renumber.go
+++ b/cmd/podman/system/renumber.go
@@ -22,11 +22,12 @@ var (
`
renumberCommand = &cobra.Command{
- Use: "renumber",
- Args: validate.NoArgs,
- Short: "Migrate lock numbers",
- Long: renumberDescription,
- Run: renumber,
+ Use: "renumber",
+ Args: validate.NoArgs,
+ DisableFlagsInUseLine: true,
+ Short: "Migrate lock numbers",
+ Long: renumberDescription,
+ Run: renumber,
}
)
diff --git a/cmd/podman/system/unshare.go b/cmd/podman/system/unshare.go
index e5d41e06d..109bab9ed 100644
--- a/cmd/podman/system/unshare.go
+++ b/cmd/podman/system/unshare.go
@@ -13,10 +13,11 @@ import (
var (
unshareDescription = "Runs a command in a modified user namespace."
unshareCommand = &cobra.Command{
- Use: "unshare [flags] [COMMAND [ARG ...]]",
- Short: "Run a command in a modified user namespace",
- Long: unshareDescription,
- RunE: unshare,
+ Use: "unshare [COMMAND [ARG ...]]",
+ DisableFlagsInUseLine: true,
+ Short: "Run a command in a modified user namespace",
+ Long: unshareDescription,
+ RunE: unshare,
Example: `podman unshare id
podman unshare cat /proc/self/uid_map,
podman unshare podman-script.sh`,