func (d *driver) Create(locator api.VolumeLocator, source *api.Source, spec *api.VolumeSpec) (api.VolumeID, error) { volumeID := uuid.New() volumeID = strings.TrimSuffix(volumeID, "\n") // Create a directory on the NFS server with this UUID. volPath := path.Join(nfsMountPath, volumeID) err := os.MkdirAll(volPath, 0744) if err != nil { log.Println(err) return api.BadVolumeID, err } if source != nil { if len(source.Seed) != 0 { seed, err := seed.New(source.Seed, spec.ConfigLabels) if err != nil { log.Warnf("Failed to initailize seed from %q : %v", source.Seed, err) return api.BadVolumeID, err } err = seed.Load(volPath) if err != nil { log.Warnf("Failed to seed from %q to %q: %v", source.Seed, nfsMountPath, err) return api.BadVolumeID, err } } } f, err := os.Create(path.Join(nfsMountPath, string(volumeID)+nfsBlockFile)) if err != nil { log.Println(err) return api.BadVolumeID, err } defer f.Close() err = f.Truncate(int64(spec.Size)) if err != nil { log.Println(err) return api.BadVolumeID, err } v := &api.Volume{ ID: api.VolumeID(volumeID), Source: source, Locator: locator, Ctime: time.Now(), Spec: spec, LastScan: time.Now(), Format: "nfs", State: api.VolumeAvailable, Status: api.Up, DevicePath: path.Join(nfsMountPath, string(volumeID)+nfsBlockFile), } err = d.CreateVol(v) if err != nil { return api.BadVolumeID, err } return v.ID, err }
func (d *driver) Create( locator *api.VolumeLocator, source *api.Source, spec *api.VolumeSpec) (string, error) { volumeID := uuid.New() volumeID = strings.TrimSuffix(volumeID, "\n") // Create a directory on the NFS server with this UUID. volPath := path.Join(nfsMountPath, volumeID) err := os.MkdirAll(volPath, 0744) if err != nil { dlog.Println(err) return "", err } if source != nil { if len(source.Seed) != 0 { seed, err := seed.New(source.Seed, spec.VolumeLabels) if err != nil { dlog.Warnf("Failed to initailize seed from %q : %v", source.Seed, err) return "", err } err = seed.Load(path.Join(volPath, config.DataDir)) if err != nil { dlog.Warnf("Failed to seed from %q to %q: %v", source.Seed, nfsMountPath, err) return "", err } } } f, err := os.Create(path.Join(nfsMountPath, volumeID+nfsBlockFile)) if err != nil { dlog.Println(err) return "", err } defer f.Close() if err := f.Truncate(int64(spec.Size)); err != nil { dlog.Println(err) return "", err } v := common.NewVolume( volumeID, api.FSType_FS_TYPE_NFS, locator, source, spec, ) v.DevicePath = path.Join(nfsMountPath, volumeID+nfsBlockFile) if err := d.CreateVol(v); err != nil { return "", err } return v.Id, err }