summaryrefslogtreecommitdiffstats
path: root/Libraries/Utils/ATFUtils.py
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/Utils/ATFUtils.py')
-rwxr-xr-xLibraries/Utils/ATFUtils.py402
1 files changed, 402 insertions, 0 deletions
diff --git a/Libraries/Utils/ATFUtils.py b/Libraries/Utils/ATFUtils.py
new file mode 100755
index 0000000..0afcf22
--- /dev/null
+++ b/Libraries/Utils/ATFUtils.py
@@ -0,0 +1,402 @@
+#!/usr/bin/env python
+
+import os
+import re
+import logging
+import ATFLog
+import ATFTests
+import ATFTestEnv
+import ATFSsh
+import ATFGlusterd
+import ATFGlusterPeer
+
+#########################################################################
+## ATFLog.Log Object
+#########################################################################
+LogObj = ATFLog.Log()
+
+#########################################################################
+## ATFTests.Tests Object
+#########################################################################
+TestsObj = ATFTests.Tests()
+
+#########################################################################
+## ATFTestEnv.TestEnv Object
+#########################################################################
+TestEnvObj = ATFTestEnv.TestEnv()
+
+#########################################################################
+## ATFSsh.Ssh Object
+#########################################################################
+SshObj = ATFSsh.Ssh()
+
+#########################################################################
+## Logger for 'ATF_LOG'
+#########################################################################
+Logger = logging.getLogger('ATF_LOG')
+
+def set_environ(**arguments):
+ """
+ Description:
+ Set the Env Variable 'envvar' to Value 'value'
+
+ Parameters:
+ **arguments: key=value pairs.
+ key: Environment Variable name
+ value: Value of the Environment Valiable
+
+ Return:
+ Success: 1 (Successfully Set the envar to value)
+ Failure: 0 (Unable to set the envvar to value)
+
+ Example:
+ ATFUtils.set_environ(ATF_USER = user1 ,ATF_SERVER = server1)
+ """
+
+ envvars = sorted(arguments.keys())
+
+ for var in envvars:
+ try:
+ os.environ[var] = arguments[var]
+
+ except KeyError as (key):
+ Logger.error("Unable to Export Environment Variable '" + key + "'")
+ return 1
+
+ else:
+ Logger.debug("Exported Environment Variable '" + var + "' = " +
+ arguments[var])
+
+ return 0
+
+def get_environ(envvar, log = 1):
+ """
+ Description:
+ Return the Value of Environment Variable 'envvar'
+
+ Parameters:
+ name: Name of the Environment Variable
+ log: To keep track of whether to log the error message or not
+
+ Return:
+ Success : Value of Environment Variable 'envvar'
+ Failure: 1
+ """
+
+ try:
+ value = os.environ[envvar]
+
+ except KeyError:
+ if log == 1:
+ Logger.error("Key Error: Environment Variable %s Not Defined" %
+ envvar)
+ value = 1
+
+ except OSError as key:
+ if log == 1:
+ Logger.error("Environment Variable '" + key + "' Not Defined")
+ value = 1
+
+ else:
+ Logger.debug("Returning " + envvar + " = " + value)
+
+ return value
+
+def parse_output(stdout, stderr):
+ """
+ Description:
+ Parse the STDOUT and STDERR ChannelFiles
+
+ Parameter:
+ stdout: ChannelFile for stdout
+ stderr: ChannelFile for stderr
+
+ Return:
+ Success: 0 (STDOUT has DATA)
+ Failure: 1 (STDERR has DATA)
+ """
+
+ output = stderr.readlines()
+
+ if len(output) == 0:
+ for line in stdout.readlines():
+ Logger.debug(line)
+ return 0
+ else:
+ for line in output:
+ Logger.error(line)
+ return 1
+
+def execute_command(command, **arguments):
+ """
+ Description:
+
+ Parameter:
+ command: Command to be executed
+ **arguments: key=value pair for specifying server, host, user
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ output = [1, 0, 0, 0]
+ ip_string = '(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})'
+ serverkey = hostkey = userkey = ''
+ serverkeyfound = hostkeyfound = 0
+
+ if arguments.has_key('server'):
+ serverkey = arguments['server']
+ serverkeyfound = 1
+ elif arguments.has_key('host'):
+ hostkey = arguments['host']
+ hostkeyfound = 1
+ else:
+ serverkey = get_environ('ATF_SERVER', log = 0)
+
+ if serverkey == 1:
+ serverkeyfound = 0
+ hostkey = get_environ('ATF_HOST')
+
+ if hostkey == 1:
+ Logger.error("Server/Host not defined for command execution")
+ return output
+ else:
+ hostkeyfound = 1
+ else:
+ serverkeyfound = 1
+
+ if serverkeyfound == 1:
+ host, user = TestEnvObj.get_server(serverkey)
+
+ if host == '' or user == '':
+ Logger.error("Server: " + serverkey +
+ "Not Defined in GlobalParam File")
+ return output
+ elif hostkey != '':
+ if re.match(ip_string, hostkey):
+ host = hostkey
+ else :
+ host = TestEnvObj.get_host(hostkey)
+ if host == '':
+ Logger.error("Host: " + hostkey +
+ "Not Defined in GlobalParam File")
+ return output
+
+ if arguments.has_key('user'):
+ userkey = arguments['user']
+ else:
+ userkey = get_environ('ATF_USER')
+ if userkey == 1:
+ Logger.error(
+ "Ignoring KeyError: Environment Variable ATF_USER Not " +
+ "Defined for command execution")
+ return output
+
+ if userkey != 'root':
+ user = TestEnvObj.get_user(userkey, log = 0)
+ if user == '':
+ Logger.error("User: " + userkey +
+ "Not Defined in GlobalParam File")
+ return output
+ else:
+ user = 'root'
+
+ Logger.info("Executing Command: " + command + " - " + user + "@" + host)
+ status, stdin, stdout, stderr = SshObj.executecommand(command, host, user)
+ output = [status, stdin, stdout, stderr]
+ return output
+
+def sshservers():
+ """
+ Description:
+ SSH to all Servers in the ServersList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for server in TestEnvObj.get_serverslist():
+ host = server['host']
+ user = server['user']
+
+ if SshObj.connect(host, user):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def sshclients():
+ """
+ Description:
+ SSH to all Clients in the ClientsList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for client in TestEnvObj.get_clientslist():
+ host = client['host']
+ user = client['user']
+
+ if SshObj.connect(host, user):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def cleanupserversglusterd():
+ """
+ Descriptions:
+ Cleanup glusterd directory on all Servers in ServersList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for host in TestEnvObj.get_servershostlist():
+ if ATFGlusterd.cleanup_glusterd(host = host):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def cleanupclientsglusterd():
+ """
+ Description:
+ Cleanup Glusted directory on all the Clients in ClientsList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for host in TestEnvObj.get_clientshostlist():
+ if ATFGlusterd.cleanup_glusterd(host = host):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def stopserversglusterd():
+ """
+ Description:
+ Stop Glusterd on all the Servers in ServersList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for host in TestEnvObj.get_servershostlist():
+ if ATFGlusterd.stop_glusterd(host = host):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def stopclientsglusterd():
+ """
+ Description:
+ Stop Glusted on all the Clients in ClientsList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for host in TestEnvObj.get_clientshostlist():
+ if ATFGlusterd.stop_glusterd(host = host):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def startserversglusterd():
+ """
+ Description:
+ Start Glusterd on all the Servers in ServersList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for host in TestEnvObj.get_servershostlist():
+ if ATFGlusterd.start_glusterd(host = host):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def startclientsglusterd():
+ """
+ Description:
+ Start GLusterd on all Clients in ClientsList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ for host in TestEnvObj.get_clientshostlist():
+ if ATFGlusterd.start_glusterd(host = host):
+ return 1
+ else:
+ continue
+
+ return 0
+
+def peerprobe():
+ """
+ Description:
+ PeerProbe to all Servers in ServerList from one of the server
+ in the ServerList
+
+ Parameters:
+ None
+
+ Returns:
+ Success: 0
+ Failure: 1
+ """
+
+ if ATFGlusterPeer.probe():
+ return 1
+ else:
+ return 0
+