mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-06-26 18:18:24 +00:00
fetch current container runtime config through the command line
Signed-off-by: Tariq Ibrahim <tibrahim@nvidia.com> add default runtime binary path to runtimes field of toolkit config toml Signed-off-by: Tariq Ibrahim <tibrahim@nvidia.com> [no-relnote] Get low-level runtimes consistently We ensure that we use the same low-level runtimes regardless of the runtime engine being configured. This ensures consistent behaviour. Signed-off-by: Evan Lezar <elezar@nvidia.com> Co-authored-by: Evan Lezar <elezar@nvidia.com> address review comment Signed-off-by: Tariq Ibrahim <tibrahim@nvidia.com>
This commit is contained in:
@@ -44,6 +44,10 @@ const (
|
||||
defaultContainerdConfigFilePath = "/etc/containerd/config.toml"
|
||||
defaultCrioConfigFilePath = "/etc/crio/crio.conf"
|
||||
defaultDockerConfigFilePath = "/etc/docker/daemon.json"
|
||||
|
||||
defaultConfigSource = configSourceFile
|
||||
configSourceCommand = "command"
|
||||
configSourceFile = "file"
|
||||
)
|
||||
|
||||
type command struct {
|
||||
@@ -64,6 +68,7 @@ type config struct {
|
||||
dryRun bool
|
||||
runtime string
|
||||
configFilePath string
|
||||
configSource string
|
||||
mode string
|
||||
hookFilePath string
|
||||
|
||||
@@ -120,6 +125,12 @@ func (m command) build() *cli.Command {
|
||||
Usage: "the config mode for runtimes that support multiple configuration mechanisms",
|
||||
Destination: &config.mode,
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "config-source",
|
||||
Usage: "the source to retrieve the container runtime configuration; one of [command, file]\"",
|
||||
Destination: &config.configSource,
|
||||
Value: defaultConfigSource,
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "oci-hook-path",
|
||||
Usage: "the path to the OCI runtime hook to create if --config-mode=oci-hook is specified. If no path is specified, the generated hook is output to STDOUT.\n\tNote: The use of OCI hooks is deprecated.",
|
||||
@@ -202,6 +213,18 @@ func (m command) validateFlags(c *cli.Context, config *config) error {
|
||||
config.runtimeConfigOverrideJSON = ""
|
||||
}
|
||||
|
||||
switch config.configSource {
|
||||
case configSourceCommand:
|
||||
if config.runtime == "docker" {
|
||||
m.logger.Warningf("A %v Config Source is not supported for %v; using %v", config.configSource, config.runtime, configSourceFile)
|
||||
config.configSource = configSourceFile
|
||||
}
|
||||
case configSourceFile:
|
||||
break
|
||||
default:
|
||||
return fmt.Errorf("unrecognized Config Source: %v", config.configSource)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -220,20 +243,25 @@ func (m command) configureWrapper(c *cli.Context, config *config) error {
|
||||
func (m command) configureConfigFile(c *cli.Context, config *config) error {
|
||||
configFilePath := config.resolveConfigFilePath()
|
||||
|
||||
var cfg engine.Interface
|
||||
var err error
|
||||
configSource, err := config.resolveConfigSource()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var cfg engine.Interface
|
||||
switch config.runtime {
|
||||
case "containerd":
|
||||
cfg, err = containerd.New(
|
||||
containerd.WithLogger(m.logger),
|
||||
containerd.WithPath(configFilePath),
|
||||
containerd.WithConfigSource(toml.FromFile(configFilePath)),
|
||||
containerd.WithConfigSource(configSource),
|
||||
)
|
||||
case "crio":
|
||||
cfg, err = crio.New(
|
||||
crio.WithLogger(m.logger),
|
||||
crio.WithPath(configFilePath),
|
||||
crio.WithConfigSource(toml.FromFile(configFilePath)),
|
||||
crio.WithConfigSource(configSource),
|
||||
)
|
||||
case "docker":
|
||||
cfg, err = docker.New(
|
||||
@@ -295,6 +323,29 @@ func (c *config) resolveConfigFilePath() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// resolveConfigSource returns the default config source or the user provided config source
|
||||
func (c *config) resolveConfigSource() (toml.Loader, error) {
|
||||
switch c.configSource {
|
||||
case configSourceCommand:
|
||||
return c.getCommandConfigSource(), nil
|
||||
case configSourceFile:
|
||||
return toml.FromFile(c.configFilePath), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unrecognized config source: %s", c.configSource)
|
||||
}
|
||||
}
|
||||
|
||||
// getConfigSourceCommand returns the default cli command to fetch the current runtime config
|
||||
func (c *config) getCommandConfigSource() toml.Loader {
|
||||
switch c.runtime {
|
||||
case "containerd":
|
||||
return containerd.CommandLineSource("")
|
||||
case "crio":
|
||||
return crio.CommandLineSource("")
|
||||
}
|
||||
return toml.Empty
|
||||
}
|
||||
|
||||
// getOuputConfigPath returns the configured config path or "" if dry-run is enabled
|
||||
func (c *config) getOuputConfigPath() string {
|
||||
if c.dryRun {
|
||||
|
||||
Reference in New Issue
Block a user