Implement --device idType://id for ctr run on Windows

Also fixes the issue that `ctr run` on Windows offered help for the
non-Windows implementation, but was silently ignored.

Signed-off-by: Paul "TBBle" Hampson <Paul.Hampson@Pobox.com>
This commit is contained in:
Paul "TBBle" Hampson 2022-03-10 22:55:03 +11:00
parent 39d52118f5
commit 2a425990cf
4 changed files with 17 additions and 4 deletions

View File

@ -165,10 +165,6 @@ var (
Name: "memory-limit", Name: "memory-limit",
Usage: "memory limit (in bytes) for the container", Usage: "memory limit (in bytes) for the container",
}, },
cli.StringSliceFlag{
Name: "device",
Usage: "file path to a device to add to the container; or a path to a directory tree of devices to add to the container",
},
cli.StringSliceFlag{ cli.StringSliceFlag{
Name: "cap-add", Name: "cap-add",
Usage: "add Linux capabilities (Set capabilities with 'CAP_' prefix)", Usage: "add Linux capabilities (Set capabilities with 'CAP_' prefix)",

View File

@ -40,5 +40,8 @@ func init() {
}, cli.StringFlag{ }, cli.StringFlag{
Name: "rootfs-propagation", Name: "rootfs-propagation",
Usage: "set the propagation of the container rootfs", Usage: "set the propagation of the container rootfs",
}, cli.StringSliceFlag{
Name: "device",
Usage: "file path to a device to add to the container; or a path to a directory tree of devices to add to the container",
}) })
} }

View File

@ -24,5 +24,8 @@ func init() {
ContainerFlags = append(ContainerFlags, cli.Uint64Flag{ ContainerFlags = append(ContainerFlags, cli.Uint64Flag{
Name: "cpu-count", Name: "cpu-count",
Usage: "number of CPUs available to the container", Usage: "number of CPUs available to the container",
}, cli.StringSliceFlag{
Name: "device",
Usage: "identifier of a device to add to the container (e.g. class://5B45201D-F2F2-4F3B-85BB-30FF1F953599)",
}) })
} }

View File

@ -19,6 +19,7 @@ package run
import ( import (
gocontext "context" gocontext "context"
"errors" "errors"
"strings"
"github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options" "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options"
"github.com/containerd/console" "github.com/containerd/console"
@ -142,6 +143,16 @@ func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli
if ccount != 0 { if ccount != 0 {
opts = append(opts, oci.WithWindowsCPUCount(ccount)) opts = append(opts, oci.WithWindowsCPUCount(ccount))
} }
for _, dev := range context.StringSlice("device") {
parts := strings.Split(dev, "://")
if len(parts) != 2 {
return nil, errors.New("devices must be in the format IDType://ID")
}
if parts[0] == "" {
return nil, errors.New("devices must have a non-empty IDType")
}
opts = append(opts, oci.WithWindowsDevice(parts[0], parts[1]))
}
} }
runtime := context.String("runtime") runtime := context.String("runtime")