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
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 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)
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
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