19099: Refactor container shell backend so it's not docker-specific.
[arvados.git] / lib / crunchrun / singularity.go
index cda10aa611b7cf8d3d1d03822495f91a9ee0f8d6..6ba65200d2741b8ac66bb3dd109986a152e30d3f 100644 (file)
@@ -5,6 +5,7 @@
 package crunchrun
 
 import (
+       "errors"
        "fmt"
        "io/ioutil"
        "os"
@@ -284,6 +285,15 @@ func (e *singularityExecutor) execCmd(path string) *exec.Cmd {
                env = append(env, "SINGULARITYENV_"+k+"="+v)
        }
 
+       // Singularity always makes all nvidia devices visible to the
+       // container.  If a resource manager such as slurm or LSF told
+       // us to select specific devices we need to propagate that.
+       if cudaVisibleDevices := os.Getenv("CUDA_VISIBLE_DEVICES"); cudaVisibleDevices != "" {
+               // If a resource manager such as slurm or LSF told
+               // us to select specific devices we need to propagate that.
+               env = append(env, "SINGULARITYENV_CUDA_VISIBLE_DEVICES="+cudaVisibleDevices)
+       }
+
        args = append(args, e.imageFilename)
        args = append(args, e.spec.Command...)
 
@@ -340,3 +350,11 @@ func (e *singularityExecutor) Close() {
                e.logf("error removing temp dir: %s", err)
        }
 }
+
+func (e *singularityExecutor) InjectCommand(ctx context.Context, detachKeys, username string, usingTTY bool, injectcmd []string) (*exec.Cmd, error) {
+       return nil, errors.New("unimplemented")
+}
+
+func (e *singularityExecutor) IPAddress() (string, error) {
+       return "", errors.New("unimplemented")
+}