Skip to content

Commit

Permalink
Default to image entrypoint for infra container
Browse files Browse the repository at this point in the history
If the pod infra container is overriden, we want to run the entry point of the image, instead of the default infra command. This allows users to override the infra-image with greater ease.
Also use process environment variables from image

Signed-off-by: Peter Hunt <pehunt@redhat.com>
  • Loading branch information
haircommander committed Mar 8, 2019
1 parent 90319bc commit dff224a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
24 changes: 21 additions & 3 deletions libpod/runtime_pod_infra_linux.go
Expand Up @@ -4,11 +4,14 @@ package libpod

import (
"context"
"strings"

"github.com/containers/libpod/libpod/image"
"github.com/containers/libpod/pkg/rootless"
"github.com/opencontainers/image-spec/specs-go/v1"
spec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/opencontainers/runtime-tools/generate"
"github.com/pkg/errors"
)

const (
Expand All @@ -17,7 +20,7 @@ const (
IDTruncLength = 12
)

func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID string) (*Container, error) {
func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID string, config *v1.ImageConfig) (*Container, error) {

// Set up generator for infra container defaults
g, err := generate.New("linux")
Expand All @@ -27,8 +30,23 @@ func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID

isRootless := rootless.IsRootless()

entryCmd := []string{r.config.InfraCommand}
// default to entrypoint in image if there is one
if len(config.Entrypoint) > 0 {
entryCmd = config.Entrypoint
}
if len(config.Env) > 0 {
for _, nameValPair := range config.Env {
nameValSlice := strings.Split(nameValPair, "=")
if len(nameValSlice) < 2 {
return nil, errors.Errorf("Invalid environment variable structure in pause image")
}
g.AddProcessEnv(nameValSlice[0], nameValSlice[1])
}
}

g.SetRootReadonly(true)
g.SetProcessArgs([]string{r.config.InfraCommand})
g.SetProcessArgs(entryCmd)

if isRootless {
g.RemoveMount("/dev/pts")
Expand Down Expand Up @@ -79,5 +97,5 @@ func (r *Runtime) createInfraContainer(ctx context.Context, p *Pod) (*Container,
imageName := newImage.Names()[0]
imageID := data.ID

return r.makeInfraContainer(ctx, p, imageName, imageID)
return r.makeInfraContainer(ctx, p, imageName, imageID, newImage.Config)
}
12 changes: 12 additions & 0 deletions test/e2e/pod_infra_container_test.go
Expand Up @@ -69,6 +69,18 @@ var _ = Describe("Podman pod create", func() {
Expect(len(check.OutputToStringArray())).To(Equal(1))
})

It("podman start infra container different image", func() {
session := podmanTest.Podman([]string{"pod", "create", "--infra-image", BB})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
podID := session.OutputToString()

session = podmanTest.Podman([]string{"pod", "start", podID})
session.WaitWithDefaultTimeout()
// If we use the default entry point, we should exit with no error
Expect(session.ExitCode()).To(Equal(0))
})

It("podman infra container namespaces", func() {
session := podmanTest.Podman([]string{"pod", "create"})
session.WaitWithDefaultTimeout()
Expand Down

0 comments on commit dff224a

Please sign in to comment.