diff options
Diffstat (limited to 'Libraries/Utils/ATFUtils.py')
-rwxr-xr-x | Libraries/Utils/ATFUtils.py | 402 |
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 + |