From 94b62dac7497ae50fc4149f404b317de542c30a1 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Wed, 22 Apr 2020 08:13:39 -0400 Subject: Fix handling of --cidfile on create/run Currently create and run are ignoring the cidfile flag. Enable stop_test.go to make sure this works. Signed-off-by: Daniel J Walsh --- cmd/podman/containers/create.go | 35 +++++++++++++++++++++++++++++++++++ cmd/podman/containers/run.go | 17 +++++++++++++++++ 2 files changed, 52 insertions(+) (limited to 'cmd') diff --git a/cmd/podman/containers/create.go b/cmd/podman/containers/create.go index 0c96f1a5c..8c0e40122 100644 --- a/cmd/podman/containers/create.go +++ b/cmd/podman/containers/create.go @@ -2,12 +2,15 @@ package containers import ( "fmt" + "os" "github.com/containers/common/pkg/config" "github.com/containers/libpod/cmd/podman/common" "github.com/containers/libpod/cmd/podman/registry" "github.com/containers/libpod/pkg/domain/entities" + "github.com/containers/libpod/pkg/errorhandling" "github.com/containers/libpod/pkg/specgen" + "github.com/containers/libpod/pkg/util" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -79,6 +82,16 @@ func create(cmd *cobra.Command, args []string) error { if err != nil { return err } + cidFile, err := openCidFile(cliVals.CIDFile) + if err != nil { + return err + } + + if cidFile != nil { + defer errorhandling.CloseQuiet(cidFile) + defer errorhandling.SyncQuiet(cidFile) + } + if rfs := cliVals.RootFS; !rfs { rawImageInput = args[0] } @@ -101,6 +114,14 @@ func create(cmd *cobra.Command, args []string) error { if err != nil { return err } + + if cidFile != nil { + _, err = cidFile.WriteString(report.Id) + if err != nil { + logrus.Error(err) + } + } + fmt.Println(report.Id) return nil } @@ -154,3 +175,17 @@ func pullImage(imageName string) error { } return nil } + +func openCidFile(cidfile string) (*os.File, error) { + if cidfile == "" { + return nil, nil + } + cidFile, err := util.OpenExclusiveFile(cidfile) + if err != nil && os.IsExist(err) { + return nil, errors.Errorf("container id file exists. Ensure another container is not using it or delete %s", cidfile) + } + if err != nil { + return nil, errors.Errorf("error opening cidfile %s", cidfile) + } + return cidFile, nil +} diff --git a/cmd/podman/containers/run.go b/cmd/podman/containers/run.go index 06b89b0fc..409b72198 100644 --- a/cmd/podman/containers/run.go +++ b/cmd/podman/containers/run.go @@ -9,6 +9,7 @@ import ( "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" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -89,6 +90,15 @@ func run(cmd *cobra.Command, args []string) error { return errors.Wrapf(err, "error checking authfile path %s", af) } } + cidFile, err := openCidFile(cliVals.CIDFile) + if err != nil { + return err + } + + if cidFile != nil { + defer errorhandling.CloseQuiet(cidFile) + defer errorhandling.SyncQuiet(cidFile) + } runOpts.Rm = cliVals.Rm if err := createInit(cmd); err != nil { return err @@ -140,6 +150,13 @@ func run(cmd *cobra.Command, args []string) error { if err != nil { return err } + if cidFile != nil { + _, err = cidFile.WriteString(report.Id) + if err != nil { + logrus.Error(err) + } + } + if cliVals.Detach { fmt.Println(report.Id) return nil -- cgit v1.2.3-54-g00ecf