mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-22 00:08:11 +00:00
Merge branch 'fix-cdi-spec-permissions' into 'main'
Generate CDI specifications with 644 permissions to allow non-root clients to consume them See merge request nvidia/container-toolkit/container-toolkit!381
This commit is contained in:
parent
9b7904e0bb
commit
b063fa40b1
@ -2,6 +2,8 @@
|
||||
|
||||
## v1.13.3
|
||||
|
||||
* Generate CDI specification files with `644` permissions to allow rootless applications (e.g. podman).
|
||||
|
||||
* [toolkit-container] Allow same envars for all runtime configs
|
||||
|
||||
## v1.13.2
|
||||
|
@ -251,6 +251,7 @@ func (m command) generateSpec(cfg *config) (spec.Interface, error) {
|
||||
spec.WithDeviceSpecs(deviceSpecs),
|
||||
spec.WithEdits(*commonEdits.ContainerEdits),
|
||||
spec.WithFormat(cfg.format),
|
||||
spec.WithPermissions(0644),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@ package spec
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform"
|
||||
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
||||
@ -33,6 +34,7 @@ type builder struct {
|
||||
edits specs.ContainerEdits
|
||||
format string
|
||||
noSimplify bool
|
||||
permissions os.FileMode
|
||||
}
|
||||
|
||||
// newBuilder creates a new spec builder with the supplied options
|
||||
@ -60,7 +62,9 @@ func newBuilder(opts ...Option) *builder {
|
||||
if s.format == "" {
|
||||
s.format = FormatYAML
|
||||
}
|
||||
|
||||
if s.permissions == 0 {
|
||||
s.permissions = 0600
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
@ -157,3 +161,10 @@ func WithRawSpec(raw *specs.Spec) Option {
|
||||
o.raw = raw
|
||||
}
|
||||
}
|
||||
|
||||
// WithPermissions sets the permissions for the generated spec file
|
||||
func WithPermissions(permissions os.FileMode) Option {
|
||||
return func(o *builder) {
|
||||
o.permissions = permissions
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,8 @@ import (
|
||||
|
||||
type spec struct {
|
||||
*specs.Spec
|
||||
format string
|
||||
format string
|
||||
permissions os.FileMode
|
||||
}
|
||||
|
||||
var _ Interface = (*spec)(nil)
|
||||
@ -51,7 +52,15 @@ func (s *spec) Save(path string) error {
|
||||
cdi.WithSpecDirs(specDir),
|
||||
)
|
||||
|
||||
return registry.SpecDB().WriteSpec(s.Raw(), filepath.Base(path))
|
||||
if err := registry.SpecDB().WriteSpec(s.Raw(), filepath.Base(path)); err != nil {
|
||||
return fmt.Errorf("failed to write spec: %w", err)
|
||||
}
|
||||
|
||||
if err := os.Chmod(path, s.permissions); err != nil {
|
||||
return fmt.Errorf("failed to set permissions on spec file: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// WriteTo writes the spec to the specified writer.
|
||||
|
Loading…
Reference in New Issue
Block a user