@@ -19,6 +19,7 @@ package e2e
1919import (
2020 "bytes"
2121 "fmt"
22+ "strings"
2223 "text/template"
2324)
2425
@@ -35,7 +36,7 @@ set -xe
3536
3637cd {{.CacheDir}}/packages/ubuntu18.04/amd64
3738
38- dpkg -i libnvidia-container1_*_amd64.deb \
39+ {{if .WithSudo }}sudo {{end}} dpkg -i libnvidia-container1_*_amd64.deb \
3940 libnvidia-container-tools_*_amd64.deb \
4041 nvidia-container-toolkit-base_*_amd64.deb \
4142 nvidia-container-toolkit_*_amd64.deb
@@ -81,7 +82,7 @@ func NewToolkitInstaller(opts ...installerOption) (*ToolkitInstaller, error) {
8182// PrepareCache ensures that the installer (package) cache is created on the runner.
8283// The can be used to ensure that docker is not REQUIRED in an inner container.
8384func (i * ToolkitInstaller ) PrepareCache (runner Runner ) (string , string , error ) {
84- renderedScript , err := i .renderScript (prepareInstallerCacheTemplate )
85+ renderedScript , err := i .renderScript (prepareInstallerCacheTemplate , false )
8586 if err != nil {
8687 return "" , "" , err
8788 }
@@ -90,24 +91,39 @@ func (i *ToolkitInstaller) PrepareCache(runner Runner) (string, string, error) {
9091}
9192
9293func (i * ToolkitInstaller ) Install (runner Runner ) (string , string , error ) {
93- renderedScript , err := i .renderScript (installFromImageTemplate )
94+ uid , _ , err := runner .Run ("id -u" )
95+ if err != nil {
96+ return "" , "" , err
97+ }
98+ withSudo := false
99+ if strings .TrimSpace (uid ) != "0" {
100+ withSudo = true
101+ }
102+ renderedScript , err := i .renderScript (installFromImageTemplate , withSudo )
94103 if err != nil {
95104 return "" , "" , err
96105 }
97106
98107 return runner .Run (renderedScript )
99108}
100109
101- func (i * ToolkitInstaller ) renderScript (scriptTemplate string ) (string , error ) {
110+ func (i * ToolkitInstaller ) renderScript (scriptTemplate string , withSudo bool ) (string , error ) {
102111 // Parse the combined template
103112 tmpl , err := template .New ("template" ).Parse (scriptTemplate )
104113 if err != nil {
105114 return "" , fmt .Errorf ("error parsing template: %w" , err )
106115 }
107116
117+ templateInfo := struct {
118+ * ToolkitInstaller
119+ WithSudo bool
120+ }{
121+ ToolkitInstaller : i ,
122+ WithSudo : withSudo ,
123+ }
108124 // Execute the template
109125 var renderedScript bytes.Buffer
110- err = tmpl .Execute (& renderedScript , i )
126+ err = tmpl .Execute (& renderedScript , templateInfo )
111127 if err != nil {
112128 return "" , fmt .Errorf ("error executing template: %w" , err )
113129 }
0 commit comments