def setup(self):
        """
            Function to setup ganesha and create volume for testing.
        """
        ret = setup_nfs_ganesha(self.no_of_ganesha_nodes)
        if ret:
            tc.logger.info("setup of ganesha for %s node is successfull"
                           % self.no_of_ganesha_nodes)
        else:
            tc.logger.error("setup of ganesha for %s node is unsuccessfull"
                            % self.no_of_ganesha_nodes)
            return False
        ret = GlusterBaseClass.setup(self)
        if not ret:
            return False
        time.sleep(10)
        ret = get_volume_status(self.volname)
        if ret is None:
            return False
        ret = get_volume_info(self.volname)
        if ret is None:
            return False
        ret, out, err = tc.run(self.mnode, "showmount -e localhost")
        if ret != 0:
            return False
        ret, out, err = mount_volume(self.volname, self.mount_proto,
                                     self.mountpoint, self.vips[0],
                                     self.clients[0], self.options)
        if ret != 0:
            tc.logger.error("Mounting Volume %s failed on %s:%s" %
                            (self.volname, self.clients[0], self.mountpoint))
            return False

        return True
Exemple #2
0
def get_pathinfo(filename, volname, mnode=None):
    """This module gets filepath of the given file in gluster server.

    Example:
        get_pathinfo("file1", "testvol")

    Args:
        filename (str): relative path of file
        volname (str): volume name

    Kwargs:
        mnode (str): Node on which cmd has to be executed. Defaults
            to tc.servers[0].

    Returns:
        NoneType: None if command execution fails, parse errors.
        list: file path for the given file in gluster server
    """

    if mnode is None:
        mnode = tc.servers[0]

    mount_point = tempfile.mkdtemp()

    # Performing glusterfs mount because only with glusterfs mount
    # the file location in gluster server can be identified
    ret, _, _ = mount_volume(volname,
                             mtype='glusterfs',
                             mpoint=mount_point,
                             mserver=mnode,
                             mclient=mnode)
    if ret != 0:
        tc.logger.error("Failed to do gluster mount on volume %s to fetch"
                        "pathinfo from server %s" % (volname, mnode))
        return None

    filename = mount_point + '/' + filename
    attr_name = 'trusted.glusterfs.pathinfo'
    output = get_extended_attributes_info([filename],
                                          attr_name=attr_name,
                                          mnode=mnode)
    if output is None:
        tc.logger.error("Failed to get path info for %s" % filename)
        return None

    pathinfo = output[filename][attr_name]

    umount_volume(mnode, mount_point)
    tc.run(mnode, "rm -rf " + mount_point)

    return re.findall(".*?POSIX.*?:(\S+)\>", pathinfo)
Exemple #3
0
def get_pathinfo(filename, volname, client=None):
    """This module gets filepath of the given file in gluster server.

    Example:
        get_pathinfo("file1", "testvol")

    Args:
        filename (str): relative path of file
        volname (str): volume name

    Kwargs:
        client (str): client on which cmd has to be executed.

    Returns:
        NoneType: None if command execution fails, parse errors.
        list: file path for the given file in gluster server
    """

    if client is None:
        client = tc.clients[0]

    server = get_volume_info(volname)[volname]['bricks'][0].split(':')[0]
    mount_point = '/mnt/tmp_fuse'

    # Performing glusterfs mount because only with glusterfs mount
    # the file location in gluster server can be identified from client
    # machine
    ret, _, _ = mount_volume(volname,
                             mtype='glusterfs',
                             mpoint=mount_point,
                             mserver=server,
                             mclient=client)
    if ret != 0:
        tc.logger.error("Failed to do gluster mount on volume %s to fetch"
                        "pathinfo from client %s" % (volname, client))
        return None

    filename = mount_point + '/' + filename
    attr_name = 'trusted.glusterfs.pathinfo'
    output = get_extended_attributes_info([filename],
                                          attr_name=attr_name,
                                          mnode=client)
    if output is None:
        tc.logger.error("Failed to get path info for %s" % filename)
        return None

    pathinfo = output[filename][attr_name]

    umount_volume(client, mount_point)

    return re.findall(".*?POSIX.*?:(\S+)\>", pathinfo)
Exemple #4
0
def get_pathinfo(filename, volname, client=None):
    """This module gets filepath of the given file in gluster server.

    Example:
        get_pathinfo("file1", "testvol")

    Args:
        filename (str): relative path of file
        volname (str): volume name

    Kwargs:
        client (str): client on which cmd has to be executed.

    Returns:
        NoneType: None if command execution fails, parse errors.
        list: file path for the given file in gluster server
    """

    if client is None:
        client = tc.clients[0]

    server = get_volume_info(volname)[volname]['bricks'][0].split(':')[0]
    mount_point = '/mnt/tmp_fuse'

    # Performing glusterfs mount because only with glusterfs mount
    # the file location in gluster server can be identified from client
    # machine
    ret, _, _ = mount_volume(volname, mtype='glusterfs',
                             mpoint=mount_point,
                             mserver=server,
                             mclient=client)
    if ret != 0:
        tc.logger.error("Failed to do gluster mount on volume %s to fetch"
                        "pathinfo from client %s"
                        % (volname, client))
        return None

    filename = mount_point + '/' + filename
    attr_name = 'trusted.glusterfs.pathinfo'
    output = get_extended_attributes_info([filename],
                                          attr_name=attr_name,
                                          mnode=client)
    if output is None:
        tc.logger.error("Failed to get path info for %s" % filename)
        return None

    pathinfo = output[filename][attr_name]

    umount_volume(client, mount_point)

    return re.findall(".*?POSIX.*?:(\S+)\>", pathinfo)
Exemple #5
0
def get_pathinfo(filename, volname, mnode=None):
    """This module gets filepath of the given file in gluster server.

    Example:
        get_pathinfo("file1", "testvol")

    Args:
        filename (str): relative path of file
        volname (str): volume name

    Kwargs:
        mnode (str): Node on which cmd has to be executed. Defaults
            to tc.servers[0].

    Returns:
        NoneType: None if command execution fails, parse errors.
        list: file path for the given file in gluster server
    """

    if mnode is None:
        mnode = tc.servers[0]

    mount_point = tempfile.mkdtemp()

    # Performing glusterfs mount because only with glusterfs mount
    # the file location in gluster server can be identified
    ret, _, _ = mount_volume(volname, mtype='glusterfs',
                             mpoint=mount_point,
                             mserver=mnode,
                             mclient=mnode)
    if ret != 0:
        tc.logger.error("Failed to do gluster mount on volume %s to fetch"
                        "pathinfo from server %s"
                        % (volname, mnode))
        return None

    filename = mount_point + '/' + filename
    attr_name = 'trusted.glusterfs.pathinfo'
    output = get_extended_attributes_info([filename],
                                          attr_name=attr_name,
                                          mnode=mnode)
    if output is None:
        tc.logger.error("Failed to get path info for %s" % filename)
        return None

    pathinfo = output[filename][attr_name]

    umount_volume(mnode, mount_point)
    tc.run(mnode, "rm -rf " + mount_point)

    return re.findall(".*?POSIX.*?:(\S+)\>", pathinfo)
 def run(self):
     _rc = True
     client = self.clients[0]
     tc.run(self.mnode, "gluster volume status %s" % self.volname)
     ret, _, _ = mount_volume(self.volname, self.mount_proto,
                              self.mountpoint, mclient=client)
     if ret != 0:
         tc.logger.error("Unable to mount the volume %s in %s"
                         "Please check the logs" % (self.volname, client))
         return False
     ret, _, _ = tc.run(client, "cp -r /etc %s" % self.mountpoint)
     if ret != 0:
         tc.logger.error("cp failed in %s. Please check the logs" % client)
         _rc = False
     tc.run(client, "rm -rf %s/etc" % self.mountpoint)
     umount_volume(client, self.mountpoint)
     return _rc
Exemple #7
0
def setup_meta_vol(servers=''):
    """
        Creates, starts and mounts the gluster meta-volume on the servers
        specified.
    """
    if servers == '':
        servers = tc.servers
    meta_volname = 'gluster_shared_storage'
    mount_point = '/var/run/gluster/shared_storage'
    metav_dist = int(tc.config_data['META_VOL_DIST_COUNT'])
    metav_rep = int(tc.config_data['META_VOL_REP_COUNT'])
    _num_bricks = metav_dist * metav_rep
    repc = ''
    if metav_rep > 1:
        repc = "replica %d" % metav_rep
    bricks = ''
    brick_root = "/bricks"
    _n = 0
    for i in range(0, _num_bricks):
        bricks = "%s %s:%s/%s_brick%d" % (bricks, servers[_n], \
                brick_root, meta_volname, i)
        if _n < len(servers) - 1:
            _n = _n + 1
        else:
            _n = 0
    gluster_cmd = "gluster volume create %s %s %s force" \
            % (meta_volname, repc, bricks)
    ret = tc.run(servers[0], gluster_cmd)
    if ret[0] != 0:
        tc.logger.error("Unable to create meta volume")
        return False
    ret = start_volume(meta_volname, servers[0])
    if not ret:
        tc.logger.error("Unable to start the meta volume")
        return False
    time.sleep(5)
    for server in servers:
        ret = mount_volume(meta_volname, 'glusterfs', mount_point, server, \
                server)
        if ret[0] != 0:
            tc.logger.error("Unable to mount meta volume on %s" % server)
            return False
    return True
Exemple #8
0
def setup_meta_vol(servers=''):
    """
        Creates, starts and mounts the gluster meta-volume on the servers
        specified.
    """
    if servers == '':
        servers = tc.servers
    meta_volname = 'gluster_shared_storage'
    mount_point = '/var/run/gluster/shared_storage'
    metav_dist = int(tc.config_data['META_VOL_DIST_COUNT'])
    metav_rep = int(tc.config_data['META_VOL_REP_COUNT'])
    _num_bricks = metav_dist * metav_rep
    repc = ''
    if metav_rep > 1:
        repc = "replica %d" % metav_rep
    bricks = ''
    brick_root = "/bricks"
    _n = 0
    for i in range(0, _num_bricks):
        bricks = "%s %s:%s/%s_brick%d" % (bricks, servers[_n], \
                brick_root, meta_volname, i)
        if _n < len(servers) - 1:
            _n = _n + 1
        else:
            _n = 0
    gluster_cmd = "gluster volume create %s %s %s force" \
            % (meta_volname, repc, bricks)
    ret = tc.run(servers[0], gluster_cmd)
    if ret[0] != 0:
        tc.logger.error("Unable to create meta volume")
        return False
    ret = start_volume(meta_volname, servers[0])
    if not ret:
        tc.logger.error("Unable to start the meta volume")
        return False
    time.sleep(5)
    for server in servers:
        ret = mount_volume(meta_volname, 'glusterfs', mount_point, server, \
                server)
        if ret[0] != 0:
            tc.logger.error("Unable to mount meta volume on %s" % server)
            return False
    return True
 def run(self):
     _rc = True
     client = self.clients[0]
     tc.run(self.mnode, "gluster volume status %s" % self.volname)
     ret, _, _ = mount_volume(self.volname,
                              self.mount_proto,
                              self.mountpoint,
                              mclient=client)
     if ret != 0:
         tc.logger.error("Unable to mount the volume %s in %s"
                         "Please check the logs" % (self.volname, client))
         return False
     ret, _, _ = tc.run(client, "cp -r /etc %s" % self.mountpoint)
     if ret != 0:
         tc.logger.error("cp failed in %s. Please check the logs" % client)
         _rc = False
     tc.run(client, "rm -rf %s/etc" % self.mountpoint)
     umount_volume(client, self.mountpoint)
     return _rc