Merge branch 'create-cdi-output-folder' into 'main'

Ensure output folder exists for CDI spec

See merge request nvidia/container-toolkit/container-toolkit!250
This commit is contained in:
Evan Lezar 2022-12-01 12:44:49 +00:00
commit 78cafe45d4

View File

@ -117,6 +117,10 @@ func (m command) run(c *cli.Context, cfg *config) error {
if cfg.output == "" { if cfg.output == "" {
outputTo = os.Stdout outputTo = os.Stdout
} else { } else {
err := createParentDirsIfRequired(cfg.output)
if err != nil {
return fmt.Errorf("failed to create parent folders for output file: %v", err)
}
outputFile, err := os.Create(cfg.output) outputFile, err := os.Create(cfg.output)
if err != nil { if err != nil {
return fmt.Errorf("failed to create output file: %v", err) return fmt.Errorf("failed to create output file: %v", err)
@ -594,3 +598,14 @@ func (m command) generateDeviceFolderPermissionHooks(nvidiaCTKPath string, devic
return hooks, nil return hooks, nil
} }
// createParentDirsIfRequired creates the parent folders of the specified path if requried.
// Note that MkdirAll does not specifically check whether the specified path is non-empty and raises an error if it is.
// The path will be empty if filename in the current folder is specified, for example
func createParentDirsIfRequired(filename string) error {
dir := filepath.Dir(filename)
if dir == "" {
return nil
}
return os.MkdirAll(dir, 0755)
}