On Wed, 2008-07-30 at 16:37 +0100, David J Craigon wrote: > It turns out that the right way to do this is use what Dell call > "CMC"- a device that manages all the blades, not just one (just like > the DRAC/MC). This is like a mix of the Dell DRAC/MC and DRAC 5 in > fence_drac. > > I've written a patch that adds support for the CMC to fence_drac. This > is my first patch ever using git, so hopefully it's good for you. > > This has been tested on a CMC, but it also changes the code for a Dell > 1950. I'm going to get a 1950 and test it tomorrow. > > Feedback welcomed! THANK YOU. SINCERELY. Please update us with test results. If no regressions pop up, this is going into the agent ASAP. THANK YOU. :) -Jim, who often feels fenced in > > David > > --- > 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 > > > >From 2899ae4468a69b89346cafba13022a9b214404f2 Mon Sep 17 00:00:00 2001 > From: David J Craigon <david@xxxxxxxxxxxxx> > Date: Wed, 30 Jul 2008 16:34:24 +0100 > Subject: Add a comment to state the CMC version this script works on > > --- > fence/agents/drac/fence_drac.pl | 1 + > 1 files changed, 1 insertions(+), 0 deletions(-) > > diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl > index f96ef22..11cc771 100644 > --- a/fence/agents/drac/fence_drac.pl > +++ b/fence/agents/drac/fence_drac.pl > @@ -13,6 +13,7 @@ > # PowerEdge 1850 DRAC 4/I 1.35 (Build 09.27) > # PowerEdge 1850 DRAC 4/I 1.40 (Build 08.24) > # PowerEdge 1950 DRAC 5 1.0 (Build 06.05.12) > +# PowerEdge M600 CMC 1.01.A05.200803072107 > # > > use Getopt::Std; -- Linux-cluster mailing list Linux-cluster@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-cluster