diff options
Diffstat (limited to 'libs/utils/hostutils.py')
-rw-r--r-- | libs/utils/hostutils.py | 419 |
1 files changed, 401 insertions, 18 deletions
diff --git a/libs/utils/hostutils.py b/libs/utils/hostutils.py index e6f7189..c7ac7f2 100644 --- a/libs/utils/hostutils.py +++ b/libs/utils/hostutils.py @@ -13,7 +13,7 @@ import re from collections import namedtuple import atfutils from atfglobals import GlobalObj -import pdb +import os system_dirs = re.compile('(/bin|/boot|/dev|/etc|/lib|/mnt|/net|/opt|/root|/sbin|/usr|/var|/sys)\/?$') @@ -27,15 +27,15 @@ def cd(hostkey, dirpath): if not host_connection: logger.error("SSH Connection Not established to host '%s' " % hostkey) return 1 - + command = ' '.join([base_command, dirpath]) logger.debug('%s: Executing Command: %s' % (hostkey, command)) output = host_connection.executecommand(command) return_status = atfutils.assert_success(output['exitstatus']) atfutils.print_stdout(output['stdoutdata']) atfutils.print_stderr(output['stderrdata']) - return return_status - + return return_status + def rmdir(hostkey, dirpath): """ """ @@ -45,7 +45,7 @@ def rmdir(hostkey, dirpath): if system_dirs.match(dirpath): logger.error("System Directiories cannot be deleted") return 1 - + else: host_connection = cm.getConnection(hostkey) if not host_connection: @@ -60,7 +60,7 @@ def rmdir(hostkey, dirpath): atfutils.print_stdout(output['stdoutdata']) atfutils.print_stderr(output['stderrdata']) return return_status - + def mkdir(hostkey, dirpath): """ """ @@ -92,7 +92,7 @@ def mkfs(hostkey, device, fstype=None): """ logger = GlobalObj.getLoggerObj() base_command = "mkfs" - cm = GlobalObj.getConnectionsManagerObj() + cm = GlobalObj.getConnectionsManagerObj() host_connection = cm.getConnection(hostkey) command = [base_command] options = [] @@ -103,9 +103,9 @@ def mkfs(hostkey, device, fstype=None): if fstype is None: fstype = "xfs" - + options.extend(["-t", fstype, "-f", device]) - + command.extend(options) command = ' '.join(command) logger.debug('%s: Executing Command: %s' % (hostkey, command)) @@ -115,13 +115,48 @@ def mkfs(hostkey, device, fstype=None): atfutils.print_stderr(output['stderrdata']) return return_status +def md5sum(hostkey, path): + """ + """ + output = {} + output["exitstatus"] = None + output["stdoutdata"] = None + output["stderrdata"] = None + + base_command1 = "rm -rf" + base_command2 = "arequal-checksum" + landfill_dir = os.path.join(path, ".landfill") + + cm = GlobalObj.getConnectionsManagerObj() + host_connection = cm.getConnection(hostkey) + if not host_connection: + logger.error("SSH connection to host '%s' has not been established" + % hostkey) + output["exitstatus"] = 1 + return output + + command1 = ' '.join([base_command1, landfill_dir]) + command2 = ' '.join([base_command2, path]) + command = ';'.join([command1, command2]) + output = host_connection.executecommand(command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + if output['stdoutdata'] is None or (not output['stdoutdata']): + output['stdoutdata'] = "" + + else: + output['stdoutdata'] = str(output['stdoutdata']) + + return output + def find_mountpoints(hostkey, device): """ """ logger = GlobalObj.getLoggerObj() - base_command = "mount | grep " + base_command = "mount | grep " cm = GlobalObj.getConnectionsManagerObj() - + host_connection = cm.getConnection(hostkey) if not host_connection: logger.error("SSH connection to host '%s' has not been established" @@ -141,13 +176,18 @@ def find_mountpoints(hostkey, device): def execute_command(hostkey, command, commandInput=None): """ """ + output = {} + output["exitstatus"] = None + output["stdoutdata"] = None + output["stderrdata"] = None logger = GlobalObj.getLoggerObj() cm = GlobalObj.getConnectionsManagerObj() host_connection = cm.getConnection(hostkey) if not host_connection: logger.error("SSH Connection Not established to host '%s' " % hostkey) - return 1 + output["exitstatus"] = 1 + return output new_command = _substitute_value_for_variables(command) logger.debug('%s: Executing Command: %s' % (hostkey, command)) @@ -157,6 +197,7 @@ def execute_command(hostkey, command, commandInput=None): return output + def _substitute_value_for_variables(command): """ """ @@ -178,14 +219,14 @@ def _substitute_value_for_variables(command): "name", "option"]) variables_to_replace = [] - + variables = pattern_for_variables.findall(command) - if not variables: + if not variables: return new_command - + else: active_volume = env.getActiveVolume() - + for variable in variables: if variable not in variables_to_replace: name, option = (variable.strip("<>")).split(".") @@ -224,11 +265,353 @@ def _substitute_value_for_variables(command): new_command = "" return new_command - return new_command + return new_command + +def gluster_install_tar(version): + """ + """ + logger = GlobalObj.getLoggerObj() + env = GlobalObj.getTestenvObj() + cm = GlobalObj.getConnectionsManagerObj() + down_path = ''.join(env.getGlusterDownloadPaths()) + + if system_dirs.match(down_path): + logger.error("System Directiories cannot be created") + return 1 + + if not down_path[-1] is '/': + down_path= down_path+'/' + + install_path = "/opt/gusterfs/"+version+"/" + + host_keys = env.getHostsKeys() + for hostkey in host_keys: + host_connection = cm.getConnection(hostkey) + if not host_connection: + logger.error("SSH Connection not established to host'%s'" + %hostkey) + return 1 + """ + stopping all the gluster processes + """ + kill_command = "killall glusterd && killall glusterfsd && killall glusterfs" + logger.debug('%s: Executing command : %s' %(hostkey, kill_command)) + output = host_connection.executecommand(kill_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + """ + Cleaning /etc/glusterd, usr/local/sbin and /usr/sbin + """ + remove_command = "rm -rf /etc/glusterd/ && rm -rf /usr/local/sbin/gluster* && rm -rf /usr/sbin/gluster* " + logger.debug('%s: Executing command : %s' %(hostkey, remove_command)) + output = host_connection.executecommand(remove_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + """ + checking for rpm installation of gluster and removing it. + """ + cleanup_command = "rpm -qa | grep gluster | xargs rpm -e" + logger.debug('%s: Executing command : %s' %(hostkey, cleanup_command)) + output = host_connection.executecommand(cleanup_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + mkdir_command = ["mkdir -p",down_path] + mkdir_command =' '.join(mkdir_command) + logger.debug('%s: Executing command : %s' %(hostkey, mkdir_command)) + output = host_connection.executecommand(mkdir_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + download_url= "http://bits.gluster.com/pub/gluster/glusterfs/src/glusterfs-"+version+".tar.gz" + """ + changing directory to the download path + """ + chdir = 'cd '+down_path+' && ' + wget_command = 'wget '+download_url + download_command = chdir + wget_command + logger.debug('%s: Executing command:%s'%(hostkey, download_command)) + output = host_connection.executecommand(download_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + extract = 'tar -xzf glusterfs-'+version+'.tar.gz' + extract_command = chdir + extract + logger.debug('%s: Executing command : %s'%(hostkey, extract_command)) + output = host_connection.executecommand(extract_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + """ + changing directory to the glusterfs directory + """ + chdir = 'cd '+down_path+'glusterfs-'+version+' && ' + configure = "./autogen.sh && ./configure --prefix="+install_path+" CFLAGS=\"-g -O0 -DDEBUG\" " + configure_command = chdir + configure + logger.debug('%s: Executing command : %s' %(hostkey, configure_command)) + output = host_connection.executecommand(configure_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + make = "make && make install" + make_command = chdir + make + logger.debug('%s: Executing command : %s'%(hostkey, make_command)) + output = host_connection.executecommand(make_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + """ + """ + symlink_command = "ln -s "+install_path+"sbin/gluster /usr/sbin/gluster && ln -s "+install_path+"sbin/glusterd /usr/sbin/glusterd && ln -s "+install_path+"sbin/glusterfsd /usr/sbin/glusterfsd && ln -s "+install_path+"sbin/glusterfs /usr/sbin/glusterfs" + logger.debug('%s: Executing command : %s'%(hostkey, symlink_command)) + output = host_connection.executecommand(symlink_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + + return 0 + +def gluster_install_git(branch): + """ + """ + logger = GlobalObj.getLoggerObj() + env = GlobalObj.getTestenvObj() + cm = GlobalObj.getConnectionsManagerObj() + down_path = ''.join(env.getGlusterDownloadPaths()) + + if system_dirs.match(down_path): + logger.error("System Directiories cannot be created") + return 1 + + if not down_path[-1] is '/': + down_path= down_path+'/' + + install_path = "/opt/gusterfs/"+branch+'/' + + host_keys = env.getHostsKeys() + for hostkey in host_keys: + host_connection = cm.getConnection(hostkey) + if not host_connection: + logger.error("SSH Connection not established to host'%s'" + %hostkey) + return 1 + """ + stopping all the gluster processes + """ + kill_command = "killall glusterd && killall glusterfsd && killall glusterfs" + logger.debug('%s: Executing command : %s' %(hostkey, kill_command)) + output = host_connection.executecommand(kill_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + """ + Cleaning /etc/glusterd , /usr/local/sbin , /usr/sbin/ + and previous git directory + """ + remove_command = "rm -rf /etc/glusterd/ && rm -rf "+down_path+"glusterfs.git && rm -rf /usr/local/sbin/gluster* && rm -rf /usr/sbin/gluster*" + logger.debug('%s: Executing command : %s' %(hostkey, remove_command)) + output = host_connection.executecommand(remove_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + """ + checking for rpm installation of gluster and removing it. + """ + cleanup_command = "rpm -qa | grep gluster | xargs rpm -e" + logger.debug('%s: Executing command : %s' %(hostkey, cleanup_command)) + output = host_connection.executecommand(cleanup_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + mkdir_command = ["mkdir -p",down_path] + mkdir_command =' '.join(mkdir_command) + logger.debug('%s: Executing command : %s' %(hostkey, mkdir_command)) + output = host_connection.executecommand(mkdir_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + git_url ='https://github.com/gluster/glusterfs.git' + + """ + changing directory to the download path + """ + chdir = 'cd '+down_path+' && ' + clone_command = ' git clone '+git_url+" "+"glusterfs.git" + git_command = chdir + clone_command + + logger.debug('%s: Executing command:%s'%(hostkey, git_command)) + output = host_connection.executecommand(git_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + """ + changing directory to the glusterfs directory and checking out + to the branch + """ + chdir = 'cd '+down_path+'glusterfs.git'+' && ' + checkout = "git checkout "+branch+' && ' + git_pull = "git pull" + git_command = chdir+ checkout + git_pull + logger.debug('%s: Executing command : %s' %(hostkey, git_command)) + output = host_connection.executecommand(git_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + configure = "./autogen.sh && ./configure --prefix="+install_path+" CFLAGS=\"-g -O0 -DDEBUG -lefence\" " + configure_command = chdir + configure + logger.debug('%s: Executing command : %s' %(hostkey, configure_command)) + output = host_connection.executecommand(configure_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + make = "make && make install" + make_command = chdir + make + logger.debug('%s: Executing command : %s'%(hostkey, make_command)) + output = host_connection.executecommand(make_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + """ + """ + symlink_command = "ln -s "+install_path+"sbin/gluster /usr/sbin/gluster && ln -s "+install_path+"sbin/glusterd /usr/sbin/glusterd && ln -s "+install_path+"sbin/glusterfsd /usr/sbin/glusterfsd && ln -s "+install_path+"sbin/glusterfs /usr/sbin/glusterfs" + logger.debug('%s: Executing command : %s'%(hostkey, symlink_command)) + output = host_connection.executecommand(symlink_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + return 0 + +def gluster_install_rpm(version, *components): + """ + """ + logger = GlobalObj.getLoggerObj() + env = GlobalObj.getTestenvObj() + cm = GlobalObj.getConnectionsManagerObj() + down_path = ''.join(env.getGlusterDownloadPaths()) + + if system_dirs.match(down_path): + logger.error("System Directiories cannot be created") + return 1 + + if not down_path[-1] is '/': + down_path= down_path+'/' + rpm_path = down_path+"glusterfs.rpm" + + host_keys = env.getHostsKeys() + for hostkey in host_keys: + host_connection = cm.getConnection(hostkey) + if not host_connection: + logger.error("SSH Connection not established to host'%s'" + %hostkey) + return 1 + + """ + stopping all the gluster processes + """ + kill_command = "killall glusterd && killall glusterfsd && killall glusterfs" + logger.debug('%s: Executing command : %s' %(hostkey, kill_command)) + output = host_connection.executecommand(kill_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + """ + deleting /etc/glusterd + """ + remove_command = "rm -rf /etc/glusterd/ && rm -rf /usr/sbin/gluster* && rm -rf /usr/local/sbin/gluster*" + logger.debug('%s: Executing command : %s' %(hostkey, remove_command)) + output = host_connection.executecommand(remove_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + """ + checking for rpm installation of gluster and removing it. + """ + cleanup_command = "rpm -qa | grep gluster | xargs rpm -e" + logger.debug('%s: Executing command : %s' %(hostkey, cleanup_command)) + output = host_connection.executecommand(cleanup_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + + mkdir_command = ["mkdir -p",rpm_path] + mkdir_command =' '.join(mkdir_command) + logger.debug('%s: Executing command : %s' %(hostkey, mkdir_command)) + output = host_connection.executecommand(mkdir_command) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + + for component in components: + component_url = "http://bits.gluster.com/pub/gluster/glusterfs/"+version+"/x86_64/glusterfs-"+component+"-"+version+"-1.x86_64.rpm" + chdir = 'cd '+rpm_path+' && ' + wget_command = "wget "+component_url + down_command = chdir + wget_command + + logger.debug('%s: Executing command:%s'%(hostkey, down_command)) + output = host_connection.executecommand(down_command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + + install_command = "rpm -ivh glusterfs-"+component+"-"+version+"-1.x86_64.rpm --nodeps" + + command = chdir + install_command + + logger.debug('%s: Executing command:%s'%(hostkey, command)) + output = host_connection.executecommand(command) + return_status = atfutils.assert_success(output['exitstatus']) + atfutils.print_stdout(output['stdoutdata']) + atfutils.print_stderr(output['stderrdata']) + if return_status: + return 1 + + return 0 + + + + __all__ = ['cd', 'rmdir', 'mkdir', 'mkfs', + 'md5sum', 'find_mountpoints', - 'execute_command'] + 'execute_command', + 'gluster_install_tar', + 'gluster_install_git', + 'gluster_install_rpm'] |