mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-02-16 17:42:20 +00:00
nvidia-ctk hook chmod: Move file mode parsing into flag validation function
Signed-off-by: Ievgen Popovych <jmennius@gmail.com>
This commit is contained in:
parent
eb35d9b30a
commit
9085cb7dd5
@ -36,7 +36,8 @@ type command struct {
|
|||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
paths cli.StringSlice
|
paths cli.StringSlice
|
||||||
mode string
|
modeStr string
|
||||||
|
mode fs.FileMode
|
||||||
containerSpec string
|
containerSpec string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +74,7 @@ func (m command) build() *cli.Command {
|
|||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "mode",
|
Name: "mode",
|
||||||
Usage: "Specify the file mode",
|
Usage: "Specify the file mode",
|
||||||
Destination: &cfg.mode,
|
Destination: &cfg.modeStr,
|
||||||
},
|
},
|
||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "container-spec",
|
Name: "container-spec",
|
||||||
@ -86,10 +87,16 @@ func (m command) build() *cli.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateFlags(c *cli.Context, cfg *config) error {
|
func validateFlags(c *cli.Context, cfg *config) error {
|
||||||
if strings.TrimSpace(cfg.mode) == "" {
|
if strings.TrimSpace(cfg.modeStr) == "" {
|
||||||
return fmt.Errorf("a non-empty mode must be specified")
|
return fmt.Errorf("a non-empty mode must be specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modeInt, err := strconv.ParseUint(cfg.modeStr, 8, 32)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to parse mode as octal: %v", err)
|
||||||
|
}
|
||||||
|
cfg.mode = fs.FileMode(modeInt)
|
||||||
|
|
||||||
for _, p := range cfg.paths.Value() {
|
for _, p := range cfg.paths.Value() {
|
||||||
if strings.TrimSpace(p) == "" {
|
if strings.TrimSpace(p) == "" {
|
||||||
return fmt.Errorf("paths must not be empty")
|
return fmt.Errorf("paths must not be empty")
|
||||||
@ -113,20 +120,14 @@ func (m command) run(c *cli.Context, cfg *config) error {
|
|||||||
return fmt.Errorf("empty container root detected")
|
return fmt.Errorf("empty container root detected")
|
||||||
}
|
}
|
||||||
|
|
||||||
desiredModeInt, err := strconv.ParseUint(cfg.mode, 8, 32)
|
paths := m.getPaths(containerRoot, cfg.paths.Value(), cfg.mode)
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to parse mode as octal: %v", err)
|
|
||||||
}
|
|
||||||
desiredMode := fs.FileMode(desiredModeInt)
|
|
||||||
|
|
||||||
paths := m.getPaths(containerRoot, cfg.paths.Value(), desiredMode)
|
|
||||||
if len(paths) == 0 {
|
if len(paths) == 0 {
|
||||||
m.logger.Debugf("No paths specified; exiting")
|
m.logger.Debugf("No paths specified; exiting")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, path := range paths {
|
for _, path := range paths {
|
||||||
err = os.Chmod(path, desiredMode)
|
err = os.Chmod(path, cfg.mode)
|
||||||
// in some cases this is not an issue (e.g. whole /dev mounted), see #143
|
// in some cases this is not an issue (e.g. whole /dev mounted), see #143
|
||||||
if errors.Is(err, fs.ErrPermission) {
|
if errors.Is(err, fs.ErrPermission) {
|
||||||
m.logger.Debugf("Ignoring permission error with chmod: %v", err)
|
m.logger.Debugf("Ignoring permission error with chmod: %v", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user