move nodelist.kid headers into node_template.kid to remove redundancy.
[monitor.git] / pcucontrol / models / DRAC.py
index e7c030a..898b5e5 100644 (file)
@@ -12,17 +12,20 @@ class DRAC(PCUControl):
                            "-o PasswordAuthentication=yes "+\
                                        "-o PubkeyAuthentication=no"
                s = pxssh.pxssh()
-               if not s.login(self.host, self.username, self.password, ssh_options,
+               try:
+                       if not s.login(self.host, self.username, self.password, ssh_options,
                                                original_prompts="Dell", login_timeout=Transport.TELNET_TIMEOUT):
-                       raise ExceptionPassword("Invalid Password")
-
-               print "logging in..."
+                               raise ExceptionPassword("Invalid Password")
+               except pexpect.EOF:
+                       raise ExceptionPrompt("Disconnect before login prompt")
+                       
+               print "logging in... %s" % self.host
                s.send("\r\n\r\n")
                try:
                        # Testing Reboot ?
                        #index = s.expect(["DRAC 5", "[%s]#" % self.username ])
                        # NOTE: be careful to escape any characters used by 're.compile'
-                       index = s.expect(["\$", "\[%s\]#" % self.username ])
+                       index = s.expect(["\$", "\[%s\]#" % self.username, "/.*>" ])
                        print "INDEX:", index
                        print s
                        if dryrun:
@@ -30,20 +33,25 @@ class DRAC(PCUControl):
                                        s.sendline("racadm getsysinfo")
                                elif index == 1:
                                        s.sendline("getsysinfo")
+                               elif index == 2:
+                                       s.sendline("racadm getsysinfo")
                        else:
                                print "serveraction powercycle"
                                if index == 0:
                                        s.sendline("racadm serveraction powercycle")
                                elif index == 1:
                                        s.sendline("serveraction powercycle")
+                               elif index == 2:
+                                       s.sendline("racadm serveraction powercycle")
                                
                        # TODO:  this is really lousy.  Without the sleep, the sendlines
                        # don't completely get through.  Even the added, expect line
                        # returns right away without waiting for the commands above to
                        # complete...  Therefore, this delay is guaranteed to fail in some
                        # other context...
-                       time.sleep(5)
-                       index = s.expect(["\$", "\[%s\]#" % self.username ])
+                       s.send("\r\n\r\n")
+                       time.sleep(20)
+                       index = s.expect(["\$", "\[%s\]#" % self.username, "/.*>" ])
                        print s
                        print "INDEX 2:", index
                        s.sendline("exit")
@@ -148,11 +156,9 @@ def racadm_reboot(host, username, password, port, dryrun):
 
                print "RUNCMD: %s" % output
                if verbose:
-                       logger.debug(output)
+                       print output
                return 0
 
        except Exception, err:
-               logger.debug("runcmd raised exception %s" % err)
-               if verbose:
-                       logger.debug(err)
-               return err
+               print "runcmd raised exception %s" % err
+               return str(err)