mirror of
https://github.com/containers/podman.git
synced 2025-05-30 07:04:03 +08:00
The cidfile should be created when the container is created
Currently if you run an interactive session of podman run and specifiy the --cidfile option, the cidfile will not get created until the container finishes running. If you run a detached container, it will get created right away. This Patch creates the cidfile as soon as the container is created. This could allow other tools to use the cidefile on all running containers. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -15,11 +15,9 @@ import (
|
||||
"github.com/containers/podman/v2/cmd/podman/utils"
|
||||
"github.com/containers/podman/v2/libpod/define"
|
||||
"github.com/containers/podman/v2/pkg/domain/entities"
|
||||
"github.com/containers/podman/v2/pkg/errorhandling"
|
||||
"github.com/containers/podman/v2/pkg/specgen"
|
||||
"github.com/containers/podman/v2/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
@ -94,15 +92,6 @@ 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 err := createInit(cmd); err != nil {
|
||||
return err
|
||||
@ -139,10 +128,9 @@ func create(cmd *cobra.Command, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if cidFile != nil {
|
||||
_, err = cidFile.WriteString(report.Id)
|
||||
if err != nil {
|
||||
logrus.Error(err)
|
||||
if cliVals.CIDFile != "" {
|
||||
if err := util.CreateCidFile(cliVals.CIDFile, report.Id); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@ -269,20 +257,6 @@ func pullImage(imageName string) (string, error) {
|
||||
return imageName, 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
|
||||
}
|
||||
|
||||
// createPodIfNecessary automatically creates a pod when requested. if the pod name
|
||||
// has the form new:ID, the pod ID is created and the name in the spec generator is replaced
|
||||
// with ID.
|
||||
|
@ -111,15 +111,8 @@ 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.CIDFile = cliVals.CIDFile
|
||||
runOpts.Rm = cliVals.Rm
|
||||
if err := createInit(cmd); err != nil {
|
||||
return err
|
||||
@ -193,12 +186,6 @@ 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 runOpts.Detach {
|
||||
fmt.Println(report.Id)
|
||||
|
@ -294,6 +294,7 @@ type ContainerListOptions struct {
|
||||
// ContainerRunOptions describes the options needed
|
||||
// to run a container from the CLI
|
||||
type ContainerRunOptions struct {
|
||||
CIDFile string
|
||||
Detach bool
|
||||
DetachKeys string
|
||||
ErrorStream *os.File
|
||||
|
@ -29,6 +29,7 @@ import (
|
||||
"github.com/containers/podman/v2/pkg/signal"
|
||||
"github.com/containers/podman/v2/pkg/specgen"
|
||||
"github.com/containers/podman/v2/pkg/specgen/generate"
|
||||
"github.com/containers/podman/v2/pkg/util"
|
||||
"github.com/containers/storage"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
@ -846,6 +847,12 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if opts.CIDFile != "" {
|
||||
if err := util.CreateCidFile(opts.CIDFile, ctr.ID()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
var joinPod bool
|
||||
if len(ctr.PodID()) > 0 {
|
||||
joinPod = true
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"github.com/containers/podman/v2/pkg/domain/entities"
|
||||
"github.com/containers/podman/v2/pkg/errorhandling"
|
||||
"github.com/containers/podman/v2/pkg/specgen"
|
||||
"github.com/containers/podman/v2/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@ -558,6 +559,11 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
|
||||
for _, w := range con.Warnings {
|
||||
fmt.Fprintf(os.Stderr, "%s\n", w)
|
||||
}
|
||||
if opts.CIDFile != "" {
|
||||
if err := util.CreateCidFile(opts.CIDFile, con.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
report := entities.ContainerRunReport{Id: con.ID}
|
||||
|
||||
|
@ -638,3 +638,18 @@ func ValidateSysctls(strSlice []string) (map[string]string, error) {
|
||||
func DefaultContainerConfig() *config.Config {
|
||||
return containerConfig
|
||||
}
|
||||
|
||||
func CreateCidFile(cidfile string, id string) error {
|
||||
cidFile, err := OpenExclusiveFile(cidfile)
|
||||
if err != nil {
|
||||
if os.IsExist(err) {
|
||||
return errors.Errorf("container id file exists. Ensure another container is not using it or delete %s", cidfile)
|
||||
}
|
||||
return errors.Errorf("error opening cidfile %s", cidfile)
|
||||
}
|
||||
if _, err = cidFile.WriteString(id); err != nil {
|
||||
logrus.Error(err)
|
||||
}
|
||||
cidFile.Close()
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user