You are viewing a plain text version of this content. The canonical link for it is here.
Posted to tashi-commits@incubator.apache.org by rg...@apache.org on 2010/12/28 21:18:26 UTC

svn commit: r1053440 - in /incubator/tashi/branches/zoni-dev/trunk/src/zoni: client/zoni-cli.py hardware/delldrac.py hardware/systemmanagement.py

Author: rgass
Date: Tue Dec 28 21:18:24 2010
New Revision: 1053440

URL: http://svn.apache.org/viewvc?rev=1053440&view=rev
Log:
adding catch for issuing a command on a node already powered up or down.

fixing zoni-cli to allow bypassing systemmanagement and issuing commands directly to hardware specified
Fix systemmanagement bugs

Modified:
    incubator/tashi/branches/zoni-dev/trunk/src/zoni/client/zoni-cli.py
    incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/delldrac.py
    incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/systemmanagement.py

Modified: incubator/tashi/branches/zoni-dev/trunk/src/zoni/client/zoni-cli.py
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/zoni-dev/trunk/src/zoni/client/zoni-cli.py?rev=1053440&r1=1053439&r2=1053440&view=diff
==============================================================================
--- incubator/tashi/branches/zoni-dev/trunk/src/zoni/client/zoni-cli.py (original)
+++ incubator/tashi/branches/zoni-dev/trunk/src/zoni/client/zoni-cli.py Tue Dec 28 21:18:24 2010
@@ -210,7 +210,7 @@ def main():
 		host = data.getHostInfo(options.nodeName)
 		if options.hardwareType == "ipmi":
 		#hardware = zoni.hardware.systemmanagement.SystemManagement(configs,data)
-			hw = Ipmi(options.nodeName, host["ipmi_user"], host["ipmi_password"])
+			hw = Ipmi(configs, options.nodeName, host)
 #
 		if options.hardwareType == "pdu":
 			hw = raritanDominionPx(configs, host)
@@ -223,6 +223,36 @@ def main():
 				mesg = "Host (" + options.nodeName + ") does not have a DRAC card!!\n"
 				sys.stdout.write(mesg)
 				exit(1)
+		if (options.REBOOTNODE or options.POWERCYCLE  or options.POWEROFF or \
+			options.POWERON or options.POWERSTATUS or options.CONSOLE or \
+			options.POWERRESET) and options.nodeName:
+
+			if options.verbosity:
+				hw.setVerbose(True)
+
+			if options.REBOOTNODE:
+				hw.powerReset()
+				exit()
+			if options.POWERCYCLE: 
+				hw.powerCycle()
+				exit()
+			if options.POWEROFF:
+				hw.powerOff()
+				exit()
+			if options.POWERON:
+				hw.powerOn()
+				exit()
+			if options.POWERRESET:
+				hw.powerReset()
+				exit()
+			if options.POWERSTATUS:
+				hw.getPowerStatus()
+				exit()
+			if options.CONSOLE:
+				hw.activateConsole()
+				exit()
+			hw.getPowerStatus()
+			exit()
 	else:
 		hw = zoni.hardware.systemmanagement.SystemManagement(configs,data)
 

Modified: incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/delldrac.py
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/delldrac.py?rev=1053440&r1=1053439&r2=1053440&view=diff
==============================================================================
--- incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/delldrac.py (original)
+++ incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/delldrac.py Tue Dec 28 21:18:24 2010
@@ -111,8 +111,8 @@ class dellDrac(SystemManagementInterface
 		code = 0
 		fout = tempfile.TemporaryFile()
 		if self.powerStatus == 1:
-			mesg = self.hostname + " Power On\n\n"
-			return 0
+			self.log.info("Hardware power on : %s", self.hostname)
+			return 1
 			
 		child = self.__login()
 		child.logfile = fout
@@ -120,15 +120,15 @@ class dellDrac(SystemManagementInterface
 		child.sendline(cmd)
 		i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
 		fout.seek(0)
+		self.log.info("Hardware power on : %s", self.hostname)
 		for val in fout.readlines():
 			if "OK" in val:
-				mesg = self.hostname + " Power On\n\n"
-				self.log.info(mesg)
 				code = 1 
-			else:
-				mesg = self.hostname + " Power On Fail\n\n"
-				self.log.info(mesg)
-				code = -1
+			if "ALREADY POWER-ON" in val:
+				code = 1 
+				self.log.info("Hardware already powered on : %s", self.hostname)
+		if code < 1:
+			self.log.info("Hardware power on failed : %s", self.hostname)
 		fout.close()
 		child.terminate()
 		return code
@@ -143,16 +143,15 @@ class dellDrac(SystemManagementInterface
 		child.sendline(cmd)
 		i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
 		fout.seek(0)
+		self.log.info("Hardware power off : %s", self.hostname)
 		for val in fout.readlines():
 			if "OK" in val:
-				mesg = self.hostname + " Power Off\n\n"
-				self.log.info(mesg)
 				code = 1
-			else:
-				mesg = self.hostname + " Power Off Fail\n\n"
-				self.log.info(mesg)
-				code = -1
-		#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
+ 			if "CURRENTLY POWER-OFF" in val:
+				self.log.info("Hardware already power off : %s", self.hostname)
+				code = 1
+		if code < 1:
+			self.log.info("Hardware power off failed : %s", self.hostname)
 		child.terminate()
 		fout.close()
 		return code
@@ -167,15 +166,12 @@ class dellDrac(SystemManagementInterface
 		child.sendline(cmd)
 		i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
 		fout.seek(0)
+		self.log.info("Hardware power cycle : %s", self.hostname)
 		for val in fout.readlines():
 			if "OK" in val:
-				mesg = self.hostname + " Power Cycle\n\n"
-				self.log.info(mesg)
 				code = 1
-			else:
-				mesg = self.hostname + " Power Cycle Fail\n\n"
-				self.log.info(mesg)
-				code = -1
+		if code < 1:
+			self.log.info("Hardware power cycle failed : %s", self.hostname)
 		child.terminate()
 		fout.close()
 		return code
@@ -194,10 +190,8 @@ class dellDrac(SystemManagementInterface
 			if "OK" in val:
 				self.log.info("Hardware power reset : %s", self.nodeName)
 				code = 1
-				break
-		if code == 0:
+		if code < 1:
 			self.log.info("Hardware power reset fail: %s", self.nodeName)
-			code = -1
 
 		child.terminate()
 		fout.close()

Modified: incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/systemmanagement.py
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/systemmanagement.py?rev=1053440&r1=1053439&r2=1053440&view=diff
==============================================================================
--- incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/systemmanagement.py (original)
+++ incubator/tashi/branches/zoni-dev/trunk/src/zoni/hardware/systemmanagement.py Tue Dec 28 21:18:24 2010
@@ -62,6 +62,7 @@ class SystemManagement(SystemManagementI
 		#  [0] = hw method
 		#  [1] = hw method userid
 		#  [2] = hw method password
+		success = 0
 		for i in hw:
 			inst = instantiateImplementation(self.config['hardwareControl'][i[0]]['class'], self.config, nodeName, self.host)
 			a = "inst.%s" % mycmd
@@ -69,9 +70,12 @@ class SystemManagement(SystemManagementI
 				doit = eval(a)
 				if doit  > 0:
 					self.log.info("%s method success (%s) on %s (attempt %s)", i[0], mycmd, nodeName, count + 1)
+					success = 1
 					break
 				else:
 					self.log.error("%s method failed (%s) on %s (attempt %s)", i[0], mycmd, nodeName, count + 1)
+			if success:
+				break
 
 		return doit