mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-08-11 03:15:44 +00:00
Previous commits ensured that we would use database-configured paths if not explicitly overridden. However, our runtime generation did unconditionally override storage config, which made this useless. Move rootless storage configuration setup to libpod, and change storage setup so we only override if a setting is explicitly set, so we can still override what we want. Signed-off-by: Matthew Heon <mheon@redhat.com>
97 lines
3 KiB
Go
97 lines
3 KiB
Go
package libpodruntime
|
|
|
|
import (
|
|
"github.com/containers/libpod/libpod"
|
|
"github.com/containers/libpod/pkg/rootless"
|
|
"github.com/containers/libpod/pkg/util"
|
|
"github.com/containers/storage"
|
|
"github.com/pkg/errors"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
// GetRuntime generates a new libpod runtime configured by command line options
|
|
func GetRuntime(c *cli.Context) (*libpod.Runtime, error) {
|
|
storageOpts := new(storage.StoreOptions)
|
|
options := []libpod.RuntimeOption{}
|
|
|
|
if c.IsSet("uidmap") || c.IsSet("gidmap") || c.IsSet("subuidmap") || c.IsSet("subgidmap") {
|
|
mappings, err := util.ParseIDMapping(c.StringSlice("uidmap"), c.StringSlice("gidmap"), c.String("subuidmap"), c.String("subgidmap"))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
storageOpts.UIDMap = mappings.UIDMap
|
|
storageOpts.GIDMap = mappings.GIDMap
|
|
}
|
|
|
|
if c.GlobalIsSet("root") {
|
|
storageOpts.GraphRoot = c.GlobalString("root")
|
|
}
|
|
if c.GlobalIsSet("runroot") {
|
|
storageOpts.RunRoot = c.GlobalString("runroot")
|
|
}
|
|
if len(storageOpts.RunRoot) > 50 {
|
|
return nil, errors.New("the specified runroot is longer than 50 characters")
|
|
}
|
|
if c.GlobalIsSet("storage-driver") {
|
|
storageOpts.GraphDriverName = c.GlobalString("storage-driver")
|
|
}
|
|
if c.GlobalIsSet("storage-opt") {
|
|
storageOpts.GraphDriverOptions = c.GlobalStringSlice("storage-opt")
|
|
}
|
|
|
|
options = append(options, libpod.WithStorageConfig(*storageOpts))
|
|
|
|
// TODO CLI flags for image config?
|
|
// TODO CLI flag for signature policy?
|
|
|
|
if c.GlobalIsSet("namespace") {
|
|
options = append(options, libpod.WithNamespace(c.GlobalString("namespace")))
|
|
}
|
|
|
|
if c.GlobalIsSet("runtime") {
|
|
options = append(options, libpod.WithOCIRuntime(c.GlobalString("runtime")))
|
|
}
|
|
|
|
if c.GlobalIsSet("conmon") {
|
|
options = append(options, libpod.WithConmonPath(c.GlobalString("conmon")))
|
|
}
|
|
if c.GlobalIsSet("tmpdir") {
|
|
options = append(options, libpod.WithTmpDir(c.GlobalString("tmpdir")))
|
|
}
|
|
|
|
if c.GlobalIsSet("cgroup-manager") {
|
|
options = append(options, libpod.WithCgroupManager(c.GlobalString("cgroup-manager")))
|
|
} else {
|
|
if rootless.IsRootless() {
|
|
options = append(options, libpod.WithCgroupManager("cgroupfs"))
|
|
}
|
|
}
|
|
|
|
// TODO flag to set libpod static dir?
|
|
// TODO flag to set libpod tmp dir?
|
|
|
|
if c.GlobalIsSet("cni-config-dir") {
|
|
options = append(options, libpod.WithCNIConfigDir(c.GlobalString("cni-config-dir")))
|
|
}
|
|
if c.GlobalIsSet("default-mounts-file") {
|
|
options = append(options, libpod.WithDefaultMountsFile(c.GlobalString("default-mounts-file")))
|
|
}
|
|
if c.GlobalIsSet("hooks-dir-path") {
|
|
options = append(options, libpod.WithHooksDir(c.GlobalString("hooks-dir-path")))
|
|
}
|
|
|
|
// TODO flag to set CNI plugins dir?
|
|
|
|
// Pod create options
|
|
if c.IsSet("infra-image") {
|
|
options = append(options, libpod.WithDefaultInfraImage(c.String("infra-image")))
|
|
}
|
|
|
|
if c.IsSet("infra-command") {
|
|
options = append(options, libpod.WithDefaultInfraCommand(c.String("infra-command")))
|
|
}
|
|
if c.IsSet("config") {
|
|
return libpod.NewRuntimeFromConfig(c.String("config"), options...)
|
|
}
|
|
return libpod.NewRuntime(options...)
|
|
}
|