19094: Note docker/singularity/arv-mount versions in container log.
[arvados.git] / lib / crunchrun / singularity.go
index 942de4300e087a95306fc2de1d20288535581a67..879c46c8989612913b3474ebddcb88b9be5bb122 100644 (file)
@@ -37,7 +37,13 @@ func newSingularityExecutor(logf func(string, ...interface{})) (*singularityExec
        }, nil
 }
 
-func (e *singularityExecutor) Runtime() string { return "singularity" }
+func (e *singularityExecutor) Runtime() string {
+       buf, err := exec.Command("singularity", "--version").CombinedOutput()
+       if err != nil {
+               return "singularity (unknown version)"
+       }
+       return strings.TrimSuffix(string(buf), "\n")
+}
 
 func (e *singularityExecutor) getOrCreateProject(ownerUuid string, name string, containerClient *arvados.Client) (*arvados.Group, error) {
        var gp arvados.GroupList
@@ -288,10 +294,10 @@ func (e *singularityExecutor) execCmd(path string) *exec.Cmd {
        // 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.
-       for _, s := range os.Environ() {
-               if strings.HasPrefix(s, "CUDA_VISIBLE_DEVICES=") {
-                       env = append(env, "SINGULARITYENV_"+s)
-               }
+       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)