func CreateLocalVolumes() error { drv, err := nvidia.GetDriverVersion() if err != nil { return err } vols, err := nvidia.LookupVolumes("") if err != nil { return err } for _, v := range vols { n := fmt.Sprintf("%s_%s", v.Name, drv) if _, err := docker.InspectVolume(n); err == nil { if err = docker.RemoveVolume(n); err != nil { return fmt.Errorf("cannot remove %s: volume is in use", n) } } if err := docker.CreateVolume(n); err != nil { return err } path, err := docker.InspectVolume(n) if err != nil { docker.RemoveVolume(n) return err } if err := v.CreateAt(path); err != nil { docker.RemoveVolume(n) return err } fmt.Println(n) } return nil }
func dockerCLIVolumes(wr io.Writer, names []string) error { var tpl = fmt.Sprintf("--volume-driver=%s{{range .}} --volume={{.}}{{end}}", nvidia.DockerPlugin) vols := make([]string, 0, len(Volumes)) drv, err := nvidia.GetDriverVersion() if err != nil { return err } if len(names) == 1 && (names[0] == "*" || names[0] == "") { for _, v := range Volumes { vols = append(vols, fmt.Sprintf("%s_%s:%s:ro", v.Name, drv, v.Mountpoint)) } } else { for _, n := range names { v, ok := Volumes[n] if !ok { return fmt.Errorf("invalid volume: %s", n) } vols = append(vols, fmt.Sprintf("%s_%s:%s:ro", v.Name, drv, v.Mountpoint)) } } t := template.Must(template.New("").Parse(tpl)) assert(t.Execute(wr, vols)) return nil }
func CreateLocalVolumes() error { drv, err := nvidia.GetDriverVersion() if err != nil { return err } vols, err := nvidia.LookupVolumes("") if err != nil { return err } for _, v := range vols { n := fmt.Sprintf("%s_%s", v.Name, drv) if err := docker.CreateVolume(n); err != nil { return err } path, err := docker.InspectVolume(n) if err != nil { return err } if err := volumeEmpty(n, path); err != nil { return err } if err := v.CreateAt(path); err != nil { return err } fmt.Println(n) } return nil }
func writeInfoJSON(wr io.Writer) { var err error r := struct { Version struct{ Driver, CUDA string } Devices []nvidia.Device }{ Devices: Devices, } r.Version.Driver, err = nvidia.GetDriverVersion() assert(err) r.Version.CUDA, err = nvidia.GetCUDAVersion() assert(err) assert(json.NewEncoder(wr).Encode(r)) }
func volumesArgs(vols []string) ([]string, error) { args := make([]string, 0, len(vols)) drv, err := nvidia.GetDriverVersion() if err != nil { return nil, err } for _, vol := range nvidia.Volumes { for _, v := range vols { if v == vol.Name { // Check if the volume exists locally otherwise fallback to using the plugin n := fmt.Sprintf("%s_%s", vol.Name, drv) if _, err := docker.InspectVolume(n); err == nil { args = append(args, fmt.Sprintf("--volume=%s:%s:ro", n, vol.Mountpoint)) } else { args = append(args, fmt.Sprintf("--volume-driver=%s", nvidia.DockerPlugin)) args = append(args, fmt.Sprintf("--volume=%s:%s:ro", n, vol.Mountpoint)) } break } } } return args, nil }