
Unfortunately, this is a rather large diff, but perhaps worth a one-time "rip off the bandaid" for v2. This patch removes the use of "gocontext" as alias for stdLib's "context", and uses "cliContext" for uses of cli.context. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
100 lines
3.1 KiB
Go
100 lines
3.1 KiB
Go
//go:build !windows
|
|
|
|
/*
|
|
Copyright The containerd Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package commands
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/containerd/containerd/api/types/runc/options"
|
|
runtimeoptions "github.com/containerd/containerd/api/types/runtimeoptions/v1"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
func init() {
|
|
RuntimeFlags = append(RuntimeFlags, &cli.StringFlag{
|
|
Name: "runc-binary",
|
|
Usage: "Specify runc-compatible binary",
|
|
}, &cli.StringFlag{
|
|
Name: "runc-root",
|
|
Usage: "Specify runc-compatible root",
|
|
}, &cli.BoolFlag{
|
|
Name: "runc-systemd-cgroup",
|
|
Usage: "Start runc with systemd cgroup manager",
|
|
})
|
|
ContainerFlags = append(ContainerFlags, &cli.BoolFlag{
|
|
Name: "rootfs",
|
|
Usage: "Use custom rootfs that is not managed by containerd snapshotter",
|
|
}, &cli.BoolFlag{
|
|
Name: "no-pivot",
|
|
Usage: "Disable use of pivot-root (linux only)",
|
|
}, &cli.Int64Flag{
|
|
Name: "cpu-quota",
|
|
Usage: "Limit CPU CFS quota",
|
|
Value: -1,
|
|
}, &cli.Uint64Flag{
|
|
Name: "cpu-period",
|
|
Usage: "Limit CPU CFS period",
|
|
}, &cli.StringFlag{
|
|
Name: "rootfs-propagation",
|
|
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",
|
|
})
|
|
}
|
|
|
|
func getRuncOptions(cliContext *cli.Context) (*options.Options, error) {
|
|
runtimeOpts := &options.Options{}
|
|
if runcBinary := cliContext.String("runc-binary"); runcBinary != "" {
|
|
runtimeOpts.BinaryName = runcBinary
|
|
}
|
|
if cliContext.Bool("runc-systemd-cgroup") {
|
|
if cliContext.String("cgroup") == "" {
|
|
// runc maps "machine.slice:foo:deadbeef" to "/machine.slice/foo-deadbeef.scope"
|
|
return nil, errors.New("option --runc-systemd-cgroup requires --cgroup to be set, e.g. \"machine.slice:foo:deadbeef\"")
|
|
}
|
|
runtimeOpts.SystemdCgroup = true
|
|
}
|
|
if root := cliContext.String("runc-root"); root != "" {
|
|
runtimeOpts.Root = root
|
|
}
|
|
|
|
return runtimeOpts, nil
|
|
}
|
|
|
|
func RuntimeOptions(cliContext *cli.Context) (interface{}, error) {
|
|
// validate first
|
|
if (cliContext.String("runc-binary") != "" || cliContext.Bool("runc-systemd-cgroup")) &&
|
|
cliContext.String("runtime") != "io.containerd.runc.v2" {
|
|
return nil, errors.New("specifying runc-binary and runc-systemd-cgroup is only supported for \"io.containerd.runc.v2\" runtime")
|
|
}
|
|
|
|
if cliContext.String("runtime") == "io.containerd.runc.v2" {
|
|
return getRuncOptions(cliContext)
|
|
}
|
|
|
|
if configPath := cliContext.String("runtime-config-path"); configPath != "" {
|
|
return &runtimeoptions.Options{
|
|
ConfigPath: configPath,
|
|
}, nil
|
|
}
|
|
|
|
return nil, nil
|
|
}
|