func (d *Driver) MountVolume(id string, opts map[string]string) (string, error) { volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return "", err } if err := volume.Stack(d).MoveController(); err != nil { log.Errorf("Failed to move controller to %s", d.containerName) return "", err } mountPoint, err := util.VolumeMount(volume, opts[convoydriver.OPT_MOUNT_POINT], false) if err != nil { return "", err } if volume.PrepareForVM { if err := util.MountPointPrepareImageFile(mountPoint, volume.Size); err != nil { return "", err } } if err := util.ObjectSave(volume); err != nil { return "", err } return mountPoint, nil }
func (d *Driver) MountVolume(id string, opts map[string]string) (string, error) { volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return "", err } mountPoint, err := util.VolumeMount(volume, opts[convoydriver.OPT_MOUNT_POINT], false) if err != nil { return "", err } if err := util.ObjectSave(volume); err != nil { return "", err } return mountPoint, nil }
func (d *Driver) MountVolume(req Request) (string, error) { id := req.Name opts := req.Options volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return "", err } mountPoint, err := util.VolumeMount(volume, opts[OPT_MOUNT_POINT], false) if err != nil { return "", err } if err := util.ObjectSave(volume); err != nil { return "", err } return mountPoint, nil }
func Init(root string, config map[string]string) (ConvoyDriver, error) { dev := &Device{ Root: root, } exists, err := util.ObjectExists(dev) if err != nil { return nil, err } if exists { if err := util.ObjectLoad(dev); err != nil { return nil, err } } else { if err := util.MkdirIfNotExists(root); err != nil { return nil, err } serverList := config[GLUSTERFS_SERVERS] if serverList == "" { return nil, fmt.Errorf("Missing required parameter: %v", GLUSTERFS_SERVERS) } servers := strings.Split(serverList, ",") for _, server := range servers { if !util.ValidNetworkAddr(server) { return nil, fmt.Errorf("Invalid or unsolvable address: %v", server) } } defaultVolumePool := config[GLUSTERFS_DEFAULT_VOLUME_POOL] if defaultVolumePool == "" { return nil, fmt.Errorf("Missing required parameter: %v", GLUSTERFS_DEFAULT_VOLUME_POOL) } if _, exists := config[GLUSTERFS_DEFAULT_VOLUME_SIZE]; !exists { config[GLUSTERFS_DEFAULT_VOLUME_SIZE] = DEFAULT_VOLUME_SIZE } volumeSize, err := util.ParseSize(config[GLUSTERFS_DEFAULT_VOLUME_SIZE]) if err != nil || volumeSize == 0 { return nil, fmt.Errorf("Illegal default volume size specified") } dev.DefaultVolumeSize = volumeSize dev = &Device{ Root: root, Servers: servers, DefaultVolumePool: defaultVolumePool, } } // For upgrade case if dev.DefaultVolumeSize == 0 { dev.DefaultVolumeSize, err = util.ParseSize(DEFAULT_VOLUME_SIZE) if err != nil || dev.DefaultVolumeSize == 0 { return nil, fmt.Errorf("Illegal default volume size specified") } } d := &Driver{ mutex: &sync.RWMutex{}, gVolumes: map[string]*GlusterFSVolume{}, Device: *dev, } gVolume := &GlusterFSVolume{ UUID: dev.DefaultVolumePool, Servers: dev.Servers, configPath: d.Root, } // We would always mount the default volume pool // TODO: Also need to mount any existing volume's pool if _, err := util.VolumeMount(gVolume, "", true); err != nil { return nil, err } d.gVolumes[d.DefaultVolumePool] = gVolume if err := util.ObjectSave(dev); err != nil { return nil, err } return d, nil }
func Init(root string, config map[string]string) (convoydriver.ConvoyDriver, error) { dev := &Device{ Root: root, } exists, err := util.ObjectExists(dev) if err != nil { return nil, err } if exists { if err := util.ObjectLoad(dev); err != nil { return nil, err } } else { if err := util.MkdirIfNotExists(root); err != nil { return nil, err } stack := config[GLUSTERFS_RANCHER_STACK] if stack == "" { return nil, fmt.Errorf("Missing required parameter: %v", GLUSTERFS_RANCHER_STACK) } service := config[GLUSTERFS_RANCHER_GLUSTER_SERVICE] if service == "" { return nil, fmt.Errorf("Missing required parameter: %v", GLUSTERFS_RANCHER_GLUSTER_SERVICE) } defaultVolumePool := config[GLUSTERFS_DEFAULT_VOLUME_POOL] if defaultVolumePool == "" { return nil, fmt.Errorf("Missing required parameter: %v", GLUSTERFS_DEFAULT_VOLUME_POOL) } dev = &Device{ Root: root, RancherStack: stack, RancherService: service, DefaultVolumePool: defaultVolumePool, } } serverIPs, err := rancher.GetIPsForServiceInStack(dev.RancherService, dev.RancherStack) if err != nil { return nil, err } d := &Driver{ mutex: &sync.RWMutex{}, gVolumes: map[string]*GlusterFSVolume{}, Device: *dev, } gVolume := &GlusterFSVolume{ UUID: dev.DefaultVolumePool, ServerIPs: serverIPs, configPath: d.Root, } // We would always mount the default volume pool // TODO: Also need to mount any existing volume's pool if _, err := util.VolumeMount(gVolume, "", true); err != nil { return nil, err } d.gVolumes[d.DefaultVolumePool] = gVolume if err := util.ObjectSave(dev); err != nil { return nil, err } return d, nil }