Skip to content

Commit

Permalink
fix pod creation with "new:" syntax followup + allow hostname
Browse files Browse the repository at this point in the history
Fixes: 4c75fe3 ("fix pod creation with "new:" syntax")

Commit 4c75fe3 passes all net options to the pod but forgot
to unset the options for the container creation. This leads to
erros when using flags like `--ip` since we tried setting
the ip on the pod and container which obviously fails.

I didn't notice the bug because we don't throw an error when
specifing port bindings on a container which joins the pods
network namespace. (containers#7373)

Also allow the use of `--hostname` and pass that option to the
pod and unset it for the container. The container has to use
the pods hostname anyway. This would error otherwise.

Added tests to prevent regression.

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
  • Loading branch information
Luap99 authored and mheon committed Aug 20, 2020
1 parent f12f245 commit 7fc3c25
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
5 changes: 5 additions & 0 deletions cmd/podman/containers/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,12 @@ func createPodIfNecessary(s *specgen.SpecGenerator, netOpts *entities.NetOptions
Infra: true,
Net: netOpts,
CreateCommand: os.Args,
Hostname: s.ContainerBasicConfig.Hostname,
}
// Unset config values we passed to the pod to prevent them being used twice for the container and pod.
s.ContainerBasicConfig.Hostname = ""
s.ContainerNetworkConfig = specgen.ContainerNetworkConfig{}

s.Pod = podName
return registry.ContainerEngine().PodCreate(context.Background(), createOptions)
}
32 changes: 30 additions & 2 deletions test/e2e/run_networking_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -437,14 +437,42 @@ var _ = Describe("Podman run networking", func() {
It("podman run in custom CNI network with --static-ip", func() {
SkipIfRootless()
netName := "podmantestnetwork"
ipAddr := "10.20.30.128"
create := podmanTest.Podman([]string{"network", "create", "--subnet", "10.20.30.0/24", netName})
ipAddr := "10.25.30.128"
create := podmanTest.Podman([]string{"network", "create", "--subnet", "10.25.30.0/24", netName})
create.WaitWithDefaultTimeout()
Expect(create.ExitCode()).To(BeZero())

run := podmanTest.Podman([]string{"run", "-t", "-i", "--rm", "--net", netName, "--ip", ipAddr, ALPINE, "ip", "addr"})
run.WaitWithDefaultTimeout()
Expect(run.ExitCode()).To(BeZero())
Expect(run.OutputToString()).To(ContainSubstring(ipAddr))

netrm := podmanTest.Podman([]string{"network", "rm", netName})
netrm.WaitWithDefaultTimeout()
Expect(netrm.ExitCode()).To(BeZero())
})

It("podman run with new:pod and static-ip", func() {
SkipIfRemote()
SkipIfRootless()
netName := "podmantestnetwork2"
ipAddr := "10.25.40.128"
podname := "testpod"
create := podmanTest.Podman([]string{"network", "create", "--subnet", "10.25.40.0/24", netName})
create.WaitWithDefaultTimeout()
Expect(create.ExitCode()).To(BeZero())

run := podmanTest.Podman([]string{"run", "-t", "-i", "--rm", "--pod", "new:" + podname, "--net", netName, "--ip", ipAddr, ALPINE, "ip", "addr"})
run.WaitWithDefaultTimeout()
Expect(run.ExitCode()).To(BeZero())
Expect(run.OutputToString()).To(ContainSubstring(ipAddr))

podrm := podmanTest.Podman([]string{"pod", "rm", "-f", podname})
podrm.WaitWithDefaultTimeout()
Expect(podrm.ExitCode()).To(BeZero())

netrm := podmanTest.Podman([]string{"network", "rm", netName})
netrm.WaitWithDefaultTimeout()
Expect(netrm.ExitCode()).To(BeZero())
})
})
8 changes: 8 additions & 0 deletions test/e2e/run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,14 @@ USER mail`
Expect(match).To(BeTrue())
})

It("podman run --pod new with hostname", func() {
hostname := "abc"
session := podmanTest.Podman([]string{"run", "--pod", "new:foobar", "--hostname", hostname, ALPINE, "cat", "/etc/hostname"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(session.OutputToString()).To(ContainSubstring(hostname))
})

It("podman run --rm should work", func() {
session := podmanTest.Podman([]string{"run", "--rm", ALPINE, "ls"})
session.WaitWithDefaultTimeout()
Expand Down

0 comments on commit 7fc3c25

Please sign in to comment.