summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Rothberg <rothberg@redhat.com>2020-09-15 13:23:42 +0200
committerValentin Rothberg <rothberg@redhat.com>2020-09-15 13:33:22 +0200
commitce6efadd5cfe48bc8af4798a4747b74398cb4a1e (patch)
tree042439c6980bede92b1115abbe4da5d28366951d
parent5c47a331ba768d57ef94b9595415500f4e911964 (diff)
downloadpodman-ce6efadd5cfe48bc8af4798a4747b74398cb4a1e.tar.gz
podman-ce6efadd5cfe48bc8af4798a4747b74398cb4a1e.tar.bz2
podman-ce6efadd5cfe48bc8af4798a4747b74398cb4a1e.zip
run/create: record raw image
Record the user-specified "raw" image name in the SpecGenerator, so we can pass it along to the config when creating a container. We need a separate field as the image name in the generator may be set to the ID of the previously pulled image - ultimately the cause of #7404. Reverting the image name from the ID to the user input would not work since "alpine" for pulling iterates over the search registries in the registries.conf but looking up "alpine" normalizes to "localhost/alpine". Recording the raw-image name directly in the generator was the best of the options I considered as no hidden magic from search registries or normalizations (that may or may not change in the future) can interfere. The auto-update backend enforces that the raw-image name is a fully-qualified reference, so we need to worry about that in the front end. Fixes: #7407 Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
-rw-r--r--cmd/podman/containers/create.go3
-rw-r--r--cmd/podman/containers/run.go3
-rw-r--r--pkg/specgen/generate/container_create.go2
-rw-r--r--pkg/specgen/specgen.go3
-rw-r--r--test/system/250-systemd.bats3
5 files changed, 12 insertions, 2 deletions
diff --git a/cmd/podman/containers/create.go b/cmd/podman/containers/create.go
index f9d33a223..2de1c9c19 100644
--- a/cmd/podman/containers/create.go
+++ b/cmd/podman/containers/create.go
@@ -110,7 +110,9 @@ func create(cmd *cobra.Command, args []string) error {
}
imageName := args[0]
+ rawImageName := ""
if !cliVals.RootFS {
+ rawImageName = args[0]
name, err := pullImage(args[0])
if err != nil {
return err
@@ -121,6 +123,7 @@ func create(cmd *cobra.Command, args []string) error {
if err := common.FillOutSpecGen(s, &cliVals, args); err != nil {
return err
}
+ s.RawImageName = rawImageName
if _, err := createPodIfNecessary(s, cliVals.Net); err != nil {
return err
diff --git a/cmd/podman/containers/run.go b/cmd/podman/containers/run.go
index 34eea14e1..eadfe3a03 100644
--- a/cmd/podman/containers/run.go
+++ b/cmd/podman/containers/run.go
@@ -130,7 +130,9 @@ func run(cmd *cobra.Command, args []string) error {
}
imageName := args[0]
+ rawImageName := ""
if !cliVals.RootFS {
+ rawImageName = args[0]
name, err := pullImage(args[0])
if err != nil {
return err
@@ -177,6 +179,7 @@ func run(cmd *cobra.Command, args []string) error {
if err := common.FillOutSpecGen(s, &cliVals, args); err != nil {
return err
}
+ s.RawImageName = rawImageName
runOpts.Spec = s
if _, err := createPodIfNecessary(s, cliVals.Net); err != nil {
diff --git a/pkg/specgen/generate/container_create.go b/pkg/specgen/generate/container_create.go
index fda4c098c..2ac3b376f 100644
--- a/pkg/specgen/generate/container_create.go
+++ b/pkg/specgen/generate/container_create.go
@@ -95,7 +95,7 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener
if len(names) > 0 {
imgName = names[0]
}
- options = append(options, libpod.WithRootFSFromImage(newImage.ID(), imgName, s.Image))
+ options = append(options, libpod.WithRootFSFromImage(newImage.ID(), imgName, s.RawImageName))
}
if err := s.Validate(); err != nil {
return nil, errors.Wrap(err, "invalid config provided")
diff --git a/pkg/specgen/specgen.go b/pkg/specgen/specgen.go
index cca05eddb..b8f37ec7a 100644
--- a/pkg/specgen/specgen.go
+++ b/pkg/specgen/specgen.go
@@ -89,6 +89,9 @@ type ContainerBasicConfig struct {
// If not given, a default location will be used.
// Optional.
ConmonPidFile string `json:"conmon_pid_file,omitempty"`
+ // RawImageName is the user-specified and unprocessed input referring
+ // to a local or a remote image.
+ RawImageName string `json:"raw_image_name,omitempty"`
// RestartPolicy is the container's restart policy - an action which
// will be taken when the container exits.
// If not given, the default policy, which does nothing, will be used.
diff --git a/test/system/250-systemd.bats b/test/system/250-systemd.bats
index bbb5a10fb..9bd3e15a1 100644
--- a/test/system/250-systemd.bats
+++ b/test/system/250-systemd.bats
@@ -41,7 +41,8 @@ function teardown() {
fi
cname=$(random_string)
- run_podman create --name $cname --label "io.containers.autoupdate=image" --detach $IMAGE top
+ # See #7407 for --pull=always.
+ run_podman create --pull=always --name $cname --label "io.containers.autoupdate=image" --detach $IMAGE top
run_podman generate systemd --new $cname
echo "$output" > "$UNIT_FILE"