---
 fence/agents/drac/fence_drac.pl |   36 +++++++++++++++++++++++++++++-------
 1 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl
index f199814..f96ef22 100644
--- a/fence/agents/drac/fence_drac.pl
+++ b/fence/agents/drac/fence_drac.pl
@@ -38,6 +38,7 @@ my $DRAC_VERSION_MC                   = 'DRAC/MC';
 my $DRAC_VERSION_4I                    = 'DRAC 4/I';
 my $DRAC_VERSION_4P                    = 'DRAC 4/P';
 my $DRAC_VERSION_5                     = 'DRAC 5';
+my $DRAC_VERSION_CMC                           = 'CMC';
 
 my $PWR_CMD_SUCCESS                    = "/^OK/";
 my $PWR_CMD_SUCCESS_DRAC5      = "/^Server power operation successful$/";
@@ -192,10 +193,15 @@ sub login
        # DRAC5 prints version controller version info
        # only after you've logged in.
        if ($drac_version eq $DRAC_VERSION_UNKNOWN) {
-               if ($t->waitfor(Match => "/.*\($DRAC_VERSION_5\)/m")) {
+           
+               if (my ($prematch,$match)=$t->waitfor(Match => 
"/.*(\($DRAC_VERSION_5\)|$DRAC_VERSION_CMC)/m")) {
+                   if ($match=~/$DRAC_VERSION_CMC/) {
+                       $drac_version =  $DRAC_VERSION_CMC;
+                   } else {
                        $drac_version = $DRAC_VERSION_5;
+                   }
                        $cmd_prompt = "/\\\$ /";
-                       $PWR_CMD_SUCCESS = $PWR_CMD_SUCCESS_DRAC5;
+                   $PWR_CMD_SUCCESS = $PWR_CMD_SUCCESS_DRAC5;
                } else {
                        print "WARNING: unable to detect DRAC version '$_'\n";
                }
@@ -228,8 +234,10 @@ sub set_power_status
        }
        elsif ($drac_version eq $DRAC_VERSION_5) {
                $cmd = "racadm serveraction $svr_action";
-       } else
-       {
+       } 
+       elsif ($drac_version eq $DRAC_VERSION_CMC) {
+               $cmd = "racadm serveraction -m $modulename $svr_action";
+       } else {
                $cmd = "serveraction -d 0 $svr_action";
        }
 
@@ -271,6 +279,11 @@ sub set_power_status
                }
        }
        fail "failed: unexpected response: '$err'" if defined $err;
+
+       # on M600 blade systems, after power on or power off, status takes a 
couple of seconds to report correctly. Wait here before checking status again
+       sleep 5;
+
+
 }
 
 
@@ -285,6 +298,8 @@ sub get_power_status
 
        if ($drac_version eq $DRAC_VERSION_5) {
                $cmd = "racadm serveraction powerstatus";
+       } elsif ($drac_version eq $DRAC_VERSION_CMC) {
+           $cmd = "racadm serveraction powerstatus -m $modulename";
        } else {
                $cmd = "getmodinfo";
        }
@@ -306,7 +321,7 @@ sub get_power_status
 
        fail "failed: unkown dialog exception: '$_'" unless (/^$cmd$/);
 
-       if ($drac_version ne $DRAC_VERSION_5) {
+       if ($drac_version ne $DRAC_VERSION_5 && $drac_version ne 
$DRAC_VERSION_CMC) {
                #Expect:
                #  #<group>     <module>    <presence>  <pwrState>  <health>  
<svcTag>
                #   1  ---->     chassis    Present         ON      Normal    
CQXYV61
@@ -335,6 +350,11 @@ sub get_power_status
                        if(m/^Server power status: (\w+)/) {
                                $status = lc($1);
                        }
+               }
+               elsif ($drac_version eq $DRAC_VERSION_CMC) {
+                       if(m/^(\w+)/) {
+                           $status = lc($1);
+                       }
                } else {
                        my ($group,$arrow,$module,$presence,$pwrstate,$health,
                                $svctag,$junk) = split /\s+/;
@@ -364,7 +384,8 @@ sub get_power_status
        }
 
        $_=$status;
-       if(/^(on|off)$/i)
+       
+       if (/^(on|off)$/i)
        {
                # valid power states 
        }
@@ -440,6 +461,7 @@ sub do_action
                }
                        
                set_power_status on;
+               
                fail "failed: $_" unless wait_power_status on;
 
                msg "success: powered on";
@@ -641,7 +663,7 @@ if ($drac_version eq $DRAC_VERSION_III_XT)
        fail "failed: option 'modulename' not compatilble with DRAC version 
'$drac_version'" 
                if defined $modulename;
 }
-elsif ($drac_version eq $DRAC_VERSION_MC)
+elsif ($drac_version eq $DRAC_VERSION_MC || $drac_version eq $DRAC_VERSION_CMC)
 {
        fail "failed: option 'modulename' required for DRAC version 
'$drac_version'"
                unless  defined $modulename;
-- 
1.5.5.1

--
Linux-cluster mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/linux-cluster

Reply via email to