aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/podman/cliconfig/config.go1
-rw-r--r--cmd/podman/commit.go7
-rw-r--r--completions/bash/podman1
-rw-r--r--docs/source/markdown/podman-commit.1.md4
-rw-r--r--test/e2e/build_test.go23
-rw-r--r--test/e2e/commit_test.go28
6 files changed, 64 insertions, 0 deletions
diff --git a/cmd/podman/cliconfig/config.go b/cmd/podman/cliconfig/config.go
index 94a7b2091..3428746a9 100644
--- a/cmd/podman/cliconfig/config.go
+++ b/cmd/podman/cliconfig/config.go
@@ -115,6 +115,7 @@ type CommitValues struct {
Pause bool
Quiet bool
IncludeVolumes bool
+ ImageIDFile string
}
type ContainersPrune struct {
diff --git a/cmd/podman/commit.go b/cmd/podman/commit.go
index 7c35a4832..3ad3bd275 100644
--- a/cmd/podman/commit.go
+++ b/cmd/podman/commit.go
@@ -2,6 +2,7 @@ package main
import (
"fmt"
+ "io/ioutil"
"strings"
"github.com/containers/libpod/cmd/podman/cliconfig"
@@ -41,6 +42,7 @@ func init() {
flags := commitCommand.Flags()
flags.StringArrayVarP(&commitCommand.Change, "change", "c", []string{}, fmt.Sprintf("Apply the following possible instructions to the created image (default []): %s", strings.Join(ChangeCmds, " | ")))
flags.StringVarP(&commitCommand.Format, "format", "f", "oci", "`Format` of the image manifest and metadata")
+ flags.StringVarP(&commitCommand.ImageIDFile, "iidfile", "", "", "`file` to write the image ID to")
flags.StringVarP(&commitCommand.Message, "message", "m", "", "Set commit message for imported image")
flags.StringVarP(&commitCommand.Author, "author", "a", "", "Set the author for the image committed")
flags.BoolVarP(&commitCommand.Pause, "pause", "p", false, "Pause container during commit")
@@ -70,6 +72,11 @@ func commitCmd(c *cliconfig.CommitValues) error {
if err != nil {
return err
}
+ if c.ImageIDFile != "" {
+ if err = ioutil.WriteFile(c.ImageIDFile, []byte(iid), 0644); err != nil {
+ return errors.Wrapf(err, "failed to write image ID to file %q", c.ImageIDFile)
+ }
+ }
fmt.Println(iid)
return nil
}
diff --git a/completions/bash/podman b/completions/bash/podman
index 8a6fc2073..ca22ade0a 100644
--- a/completions/bash/podman
+++ b/completions/bash/podman
@@ -1247,6 +1247,7 @@ _podman_commit() {
-c
--message
-m
+ --iidfile
"
local boolean_options="
--help
diff --git a/docs/source/markdown/podman-commit.1.md b/docs/source/markdown/podman-commit.1.md
index 2f1369847..13e46a899 100644
--- a/docs/source/markdown/podman-commit.1.md
+++ b/docs/source/markdown/podman-commit.1.md
@@ -38,6 +38,10 @@ Can be set multiple times
Set the format of the image manifest and metadata. The currently supported formats are _oci_ and _docker_. If
not specifically set, the default format used is _oci_.
+**--iidfile**=*ImageIDfile*
+
+Write the image ID to the file.
+
**--include-volumes**
Include in the committed image any volumes added to the container by the `--volume` or `--mount` options to the `podman create` and `podman run` commands.
diff --git a/test/e2e/build_test.go b/test/e2e/build_test.go
index 240ef1627..8b03e9386 100644
--- a/test/e2e/build_test.go
+++ b/test/e2e/build_test.go
@@ -152,4 +152,27 @@ var _ = Describe("Podman build", func() {
Expect(strings.Fields(session.OutputToString())).
To(ContainElement("scratch"))
})
+
+ It("podman build basic alpine and print id to external file", func() {
+
+ // Switch to temp dir and restore it afterwards
+ cwd, err := os.Getwd()
+ Expect(err).To(BeNil())
+ Expect(os.Chdir(os.TempDir())).To(BeNil())
+ defer Expect(os.Chdir(cwd)).To(BeNil())
+
+ targetPath := filepath.Join(os.TempDir(), "dir")
+ targetFile := filepath.Join(targetPath, "idFile")
+
+ session := podmanTest.PodmanNoCache([]string{"build", "build/basicalpine", "--iidfile", targetFile})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ id, _ := ioutil.ReadFile(targetFile)
+
+ // Verify that id is correct
+ inspect := podmanTest.PodmanNoCache([]string{"inspect", string(id)})
+ inspect.WaitWithDefaultTimeout()
+ data := inspect.InspectImageJSON()
+ Expect(data[0].ID).To(Equal(string(id)))
+ })
})
diff --git a/test/e2e/commit_test.go b/test/e2e/commit_test.go
index d4503d5a8..72387ed8c 100644
--- a/test/e2e/commit_test.go
+++ b/test/e2e/commit_test.go
@@ -1,7 +1,9 @@
package integration
import (
+ "io/ioutil"
"os"
+ "path/filepath"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo"
@@ -234,4 +236,30 @@ var _ = Describe("Podman commit", func() {
}
Expect(envMap["TEST=1=1-01=9.01"]).To(BeTrue())
})
+
+ It("podman commit container and print id to external file", func() {
+ // Switch to temp dir and restore it afterwards
+ cwd, err := os.Getwd()
+ Expect(err).To(BeNil())
+ Expect(os.Chdir(os.TempDir())).To(BeNil())
+ targetPath := filepath.Join(os.TempDir(), "dir")
+ Expect(os.MkdirAll(targetPath, 0755)).To(BeNil())
+ targetFile := filepath.Join(targetPath, "idFile")
+ defer Expect(os.RemoveAll(targetFile)).To(BeNil())
+ defer Expect(os.Chdir(cwd)).To(BeNil())
+
+ _, ec, _ := podmanTest.RunLsContainer("test1")
+ Expect(ec).To(Equal(0))
+ Expect(podmanTest.NumberOfContainers()).To(Equal(1))
+
+ session := podmanTest.Podman([]string{"commit", "test1", "foobar.com/test1-image:latest", "--iidfile", targetFile})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ id, _ := ioutil.ReadFile(targetFile)
+ check := podmanTest.Podman([]string{"inspect", "foobar.com/test1-image:latest"})
+ check.WaitWithDefaultTimeout()
+ data := check.InspectImageJSON()
+ Expect(data[0].ID).To(Equal(string(id)))
+ })
})