summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2012-01-24 02:30:04 -0800
committerGerrit Code Review <root@dev.gluster.com>2012-01-24 02:30:04 -0800
commiteb0947bf7d6b827aeb8cd45558ec4882a349faf9 (patch)
treea1639a7a02a347017b15966614e9fc2ddd316978
parent439c9725888fcd63dfbcb0ea234a9bbe1ec019a4 (diff)
parent51d21cdc228103119773ed228c0d5242e8b7449b (diff)
Merge "Gluster installation through tar,git,rpm."
-rwxr-xr-xlibs/connect/ssh.py35
-rw-r--r--libs/utils/hostutils.py346
2 files changed, 365 insertions, 16 deletions
diff --git a/libs/connect/ssh.py b/libs/connect/ssh.py
index a419c31..e4540d5 100755
--- a/libs/connect/ssh.py
+++ b/libs/connect/ssh.py
@@ -7,8 +7,8 @@ import time
from atfglobals import GlobalObj
class SshConnection():
-
- def __init__(self):
+
+ def __init__(self):
self._connection = paramiko.SSHClient()
def connect(self, host, user, password):
@@ -17,14 +17,14 @@ class SshConnection():
SSH to Server "host" as User "user"
Parameter:
- host: Server IP Address
+ host: Server IP Address
user: Login Username
password: Login password
Return:
Success: 0
Failure: 1
- """
+ """
logger = GlobalObj.getLoggerObj()
self._connection.set_missing_host_key_policy(paramiko.AutoAddPolicy())
@@ -43,22 +43,22 @@ class SshConnection():
except paramiko.SSHException:
logger.error("SSHException: Unknown server " + host)
- return 1
+ return 1
return 0
def close(self):
"""
Objective:
- Close SSH Connections
+ Close SSH Connections
"""
self._connection.close()
- return
+ return
def executecommand(self, command, commandInput=None):
"""
Objective:
- Execute Command "comamnd"
+ Execute Command "comamnd"
Parameters:
command: command to execute
@@ -73,14 +73,23 @@ class SshConnection():
output["stdoutdata"] = None
output["stderrdata"] = None
exit_status_ready_flag = True
-
+
try:
transport = self._connection.get_transport()
channel = transport.open_session()
channel.exec_command(command)
# Adding sleep to get the correct exit_status.
- time.sleep(5)
- exit_status_ready_flag = channel.exit_status_ready()
+ timeout = 60
+ sleeptime = 5
+ while timeout:
+ time.sleep(sleeptime)
+ exit_status_ready_flag = channel.exit_status_ready()
+ if not exit_status_ready_flag:
+ timeout -=1
+ continue
+ else:
+ break
+
if not exit_status_ready_flag:
stdin = channel.makefile("wb")
@@ -91,7 +100,7 @@ class SshConnection():
after executing comamnd for command completion")
stdin.write("\n")
return output
-
+
stdout = channel.makefile("rb")
stderr = channel.makefile_stderr("rb")
exit_status = channel.recv_exit_status()
@@ -104,5 +113,3 @@ class SshConnection():
logger.error("Unable to Execute Command: " + command)
return output
-
-
diff --git a/libs/utils/hostutils.py b/libs/utils/hostutils.py
index bb4ca29..c7ac7f2 100644
--- a/libs/utils/hostutils.py
+++ b/libs/utils/hostutils.py
@@ -197,6 +197,7 @@ def execute_command(hostkey, command, commandInput=None):
return output
+
def _substitute_value_for_variables(command):
"""
"""
@@ -264,7 +265,345 @@ 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',
@@ -272,4 +611,7 @@ __all__ = ['cd',
'mkfs',
'md5sum',
'find_mountpoints',
- 'execute_command']
+ 'execute_command',
+ 'gluster_install_tar',
+ 'gluster_install_git',
+ 'gluster_install_rpm']