Skip to content

Commit

Permalink
Merge pull request #7209 from giuseppe/support-mount-devpts
Browse files Browse the repository at this point in the history
podman: support --mount type=devpts
  • Loading branch information
openshift-merge-robot authored Aug 4, 2020
2 parents 1ed1e58 + 976e364 commit 919e5d4
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 2 deletions.
44 changes: 44 additions & 0 deletions cmd/podman/common/volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ const (
TypeVolume = "volume"
// TypeTmpfs is the type for mounting tmpfs
TypeTmpfs = "tmpfs"
// TypeDevpts is the type for creating a devpts
TypeDevpts = "devpts"
)

var (
Expand Down Expand Up @@ -197,6 +199,15 @@ func getMounts(mountFlag []string) (map[string]spec.Mount, map[string]*specgen.N
return nil, nil, errors.Wrapf(errDuplicateDest, mount.Destination)
}
finalMounts[mount.Destination] = mount
case TypeDevpts:
mount, err := getDevptsMount(tokens)
if err != nil {
return nil, nil, err
}
if _, ok := finalMounts[mount.Destination]; ok {
return nil, nil, errors.Wrapf(errDuplicateDest, mount.Destination)
}
finalMounts[mount.Destination] = mount
case "volume":
volume, err := getNamedVolume(tokens)
if err != nil {
Expand Down Expand Up @@ -416,6 +427,39 @@ func getTmpfsMount(args []string) (spec.Mount, error) {
return newMount, nil
}

// Parse a single devpts mount entry from the --mount flag
func getDevptsMount(args []string) (spec.Mount, error) {
newMount := spec.Mount{
Type: TypeDevpts,
Source: TypeDevpts,
}

var setDest bool

for _, val := range args {
kv := strings.Split(val, "=")
switch kv[0] {
case "target", "dst", "destination":
if len(kv) == 1 {
return newMount, errors.Wrapf(optionArgError, kv[0])
}
if err := parse.ValidateVolumeCtrDir(kv[1]); err != nil {
return newMount, err
}
newMount.Destination = filepath.Clean(kv[1])
setDest = true
default:
return newMount, errors.Wrapf(util.ErrBadMntOption, kv[0])
}
}

if !setDest {
return newMount, noDestError
}

return newMount, nil
}

// Parse a single volume mount entry from the --mount flag.
// Note that the volume-label option for named volumes is currently NOT supported.
// TODO: add support for --volume-label
Expand Down
4 changes: 3 additions & 1 deletion docs/source/markdown/podman-create.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ Tune a container's memory swappiness behavior. Accepts an integer between 0 and

Attach a filesystem mount to the container

Current supported mount TYPES are `bind`, `volume`, and `tmpfs`. <sup>[[1]](#Footnote1)</sup>
Current supported mount TYPES are `bind`, `volume`, `tmpfs` and `devpts`. <sup>[[1]](#Footnote1)</sup>

e.g.

Expand All @@ -506,6 +506,8 @@ Current supported mount TYPES are `bind`, `volume`, and `tmpfs`. <sup>[[1]](#Foo

type=tmpfs,tmpfs-size=512M,destination=/path/in/container

type=devpts,destination=/dev/pts

Common Options:

· src, source: mount source spec for bind and volume. Mandatory for bind.
Expand Down
4 changes: 3 additions & 1 deletion docs/source/markdown/podman-run.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ Tune a container's memory swappiness behavior. Accepts an integer between *0* an

Attach a filesystem mount to the container

Current supported mount TYPEs are **bind**, **volume**, and **tmpfs**. <sup>[[1]](#Footnote1)</sup>
Current supported mount TYPEs are **bind**, **volume**, **tmpfs** and **devpts**. <sup>[[1]](#Footnote1)</sup>

e.g.

Expand All @@ -513,6 +513,8 @@ Current supported mount TYPEs are **bind**, **volume**, and **tmpfs**. <sup>[[1]

type=tmpfs,tmpfs-size=512M,destination=/path/in/container

type=devpts,destination=/dev/pts

Common Options:

· src, source: mount source spec for bind and volume. Mandatory for bind.
Expand Down
8 changes: 8 additions & 0 deletions test/e2e/run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -811,6 +811,14 @@ USER mail`
Expect(len(session.OutputToStringArray())).To(Equal(1))
})

It("podman run --mount type=devpts,target=/foo/bar", func() {
SkipIfRootless()
session := podmanTest.Podman([]string{"run", "--mount", "type=devpts,target=/foo/bar", fedoraMinimal, "stat", "-f", "-c%T", "/foo/bar"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(session.OutputToString()).To(ContainSubstring("devpts"))
})

It("podman run --pod automatically", func() {
session := podmanTest.Podman([]string{"run", "-d", "--pod", "new:foobar", ALPINE, "nc", "-l", "-p", "8080"})
session.WaitWithDefaultTimeout()
Expand Down

0 comments on commit 919e5d4

Please sign in to comment.