FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Cluster Development

 
 
LinkBack Thread Tools
 
Old 01-19-2009, 09:19 PM
Matthew Kent
 
Default add Intel Modular Server fencing agent based on ibmblade fence

---
fence/agents/intelmodular/Makefile | 4 +
fence/agents/intelmodular/fence_modular.pl | 273 ++++++++++++++++++++++++++++
2 files changed, 277 insertions(+), 0 deletions(-)
create mode 100644 fence/agents/intelmodular/Makefile
create mode 100644 fence/agents/intelmodular/fence_modular.pl

diff --git a/fence/agents/intelmodular/Makefile b/fence/agents/intelmodular/Makefile
new file mode 100644
index 0000000..ba22926
--- /dev/null
+++ b/fence/agents/intelmodular/Makefile
@@ -0,0 +1,4 @@
+TARGET= fence_intelmodular
+
+include ../../../make/defines.mk
+include $(OBJDIR)/make/fencebuild.mk
diff --git a/fence/agents/intelmodular/fence_modular.pl b/fence/agents/intelmodular/fence_modular.pl
new file mode 100644
index 0000000..8d9546f
--- /dev/null
+++ b/fence/agents/intelmodular/fence_modular.pl
@@ -0,0 +1,273 @@
+#!/usr/bin/perl
+
+# Intel Modular Server fencing based on fence_ibmblade.pl
+#
+# Tested with an Intel MFSYS25 using firmware package 2.6 Should work with an
+# MFSYS35 as well.
+#
+# Requires Net::SNMP
+#
+# Notes:
+#
+# The manual and firmware release notes says SNMP is read only. This is not
+# true, as per the MIBs that ship with the firmware you can write to
+# the bladePowerLed oid to control the servers.
+
+use Getopt::Std;
+use Net::SNMP;
+
+# Get the program name from $0 and strip directory names
+$_=$0;
+s/.*///;
+my $pname = $_;
+
+my $sleep_time = 5;
+my $snmp_timeout = 10;
+$opt_o = "reboot";
+$opt_u = 161;
+
+# from INTELCORPORATION-MULTI-FLEX-SERVER-BLADES-MIB.my that ships with
+# firmware updates
+my $oid_power = ".1.3.6.1.4.1.343.2.19.1.2.10.202.1.1.6"; # bladePowerLed
+
+# WARNING!! Do not add code bewteen "#BEGIN_VERSION_GENERATION" and
+# "#END_VERSION_GENERATION" It is generated by the Makefile
+
+#BEGIN_VERSION_GENERATION
+$RELEASE_VERSION="";
+$REDHAT_COPYRIGHT="";
+$BUILD_DATE="";
+#END_VERSION_GENERATION
+
+sub usage
+{
+ print "Usage:
";
+ print "
";
+ print "$pname [options]
";
+ print "
";
+ print "Options:
";
+ print " -a <ip> IP address or hostname of Intel Modular Server
";
+ print " -h usage
";
+ print " -c <community> SNMP Community
";
+ print " -n <num> Server number to disable
";
+ print " -o <string> Action: Reboot (default), On or Off
";
+ print " -u <udpport> UDP port to use (default: 161)
";
+ print " -q quiet mode
";
+ print " -t test power state
";
+ print " -V version
";
+
+ exit 0;
+}
+
+sub fail_usage
+{
+ ($msg)=@_;
+ print STDERR $msg."
" if $msg;
+ print STDERR "Please use '-h' for usage.
";
+ exit 1;
+}
+
+sub fail
+{
+ ($msg) = @_;
+ print $msg."
" unless defined $opt_q;
+ $t->close if defined $t;
+ exit 1;
+}
+
+sub version
+{
+ print "$pname $RELEASE_VERSION $BUILD_DATE
";
+ print "$REDHAT_COPYRIGHT
" if ( $REDHAT_COPYRIGHT );
+
+ exit 0;
+}
+
+sub get_options_stdin
+{
+ my $opt;
+ my $line = 0;
+ while( defined($in = <>) )
+ {
+ $_ = $in;
+ chomp;
+
+ # strip leading and trailing whitespace
+ s/^s*//;
+ s/s*$//;
+
+ # skip comments
+ next if /^#/;
+
+ $line+=1;
+ $opt=$_;
+ next unless $opt;
+
+ ($name,$val)=split /s*=s*/, $opt;
+
+ if ( $name eq "" )
+ {
+ print STDERR "parse error: illegal name in option $line
";
+ exit 2;
+ }
+
+ # DO NOTHING -- this field is used by fenced
+ elsif ($name eq "agent" ) { }
+
+ elsif ($name eq "ipaddr" )
+ {
+ $opt_a = $val;
+ }
+ elsif ($name eq "community" )
+ {
+ $opt_c = $val;
+ }
+
+ elsif ($name eq "option" )
+ {
+ $opt_o = $val;
+ }
+ elsif ($name eq "port" )
+ {
+ $opt_n = $val;
+ }
+ elsif ($name eq "udpport" )
+ {
+ $opt_u = $val;
+ }
+
+ # FIXME should we do more error checking?
+ # Excess name/vals will be eaten for now
+ else
+ {
+ fail "parse error: unknown option "$opt"";
+ }
+ }
+}
+
+# ---------------------------- MAIN --------------------------------
+
+if (@ARGV > 0) {
+ getopts("a:hc:n:qu:tV") || fail_usage ;
+
+ usage if defined $opt_h;
+ version if defined $opt_V;
+
+ fail_usage "Unknown parameter." if (@ARGV > 0);
+
+ fail_usage "No '-a' flag specified." unless defined $opt_a;
+ fail_usage "No '-n' flag specified." unless defined $opt_n;
+ fail_usage "No '-c' flag specified." unless defined $opt_c;
+ fail_usage "Unrecognised action '$opt_o' for '-o' flag"
+ unless $opt_o =~ /^(reboot|on|off)$/i;
+
+} else {
+ get_options_stdin();
+
+ fail "failed: no IP address" unless defined $opt_a;
+ fail "failed: no server number" unless defined $opt_n;
+ fail "failed: no SNMP community" unless defined $opt_c;
+ fail "failed: unrecognised action: $opt_o"
+ unless $opt_o =~ /^(reboot|on|off)$/i;
+}
+
+my ($snmpsess, $error) = Net::SNMP->session (
+ -hostname => $opt_a,
+ -version => "snmpv1",
+ -port => $opt_u,
+ -community => $opt_c,
+ -timeout => $snmp_timeout);
+
+if (!defined ($snmpsess)) {
+ printf("$RELEASE_VERSION ERROR: %s.
", $error);
+ exit 1;
+};
+
+# first check in what state are we now
+my $oid = $oid_power . "." . $opt_n;
+my $oid_val = "";
+my $result = $snmpsess->get_request (
+ -varbindlist => [$oid]
+);
+if (!defined($result)) {
+ printf("$RELEASE_VERSION ERROR: %s.
", $snmpsess->error);
+ $snmpsess->close;
+ exit 1;
+}
+
+if (defined ($opt_t)) {
+ printf ("$RELEASE_VERSION STATE: Server %d on %s returned %d
", $opt_n, $opt_a, $result->{$oid});
+ exit 1;
+};
+
+if ($opt_o =~ /^(reboot|off)$/i) {
+ if ($result->{$oid} == "0") {
+ printf ("$RELEASE_VERSION WARNING: Server %d on %s already down.
", $opt_n, $opt_a);
+ $snmpsess->close;
+ exit 0;
+ };
+} else {
+ if ($result->{$oid} == "2") {
+ printf ("$RELEASE_VERSION WARNING: Server %d on %s already up.
", $opt_n, $opt_a);
+ $snmpsess->close;
+ exit 0;
+ };
+};
+
+# excellent, now change the state
+if ($opt_o =~ /^reboot$/i) {
+ # reboot
+ $oid_val = "4";
+} elsif ($opt_o =~ /^on$/i) {
+ # power on
+ $oid_val = "2";
+} else {
+ # power down
+ $oid_val = "3";
+};
+
+$result = $snmpsess->set_request (
+ -varbindlist => [$oid, INTEGER, $oid_val]
+);
+
+if (!defined ($result)) {
+ printf("$RELEASE_VERSION ERROR: %s.
", $snmpsess->error);
+ $snmpsess->close;
+ exit 1;
+};
+
+# now, wait a bit and see if we have done it
+sleep($sleep_time);
+
+undef $result;
+$result = $snmpsess->get_request (
+ -varbindlist => [$oid]
+);
+
+if (!defined($result)) {
+ # this is a real error
+ printf("$RELEASE_VERSION ERROR: %s.
", $snmpsess->error);
+ $snmpsess->close;
+ exit 1;
+};
+
+if ($opt_o =~ /^(off)$/i) {
+ if ($result->{$oid} == "2") {
+ printf ("$RELEASE_VERSION ERROR: Server %d on %s still up.
", $opt_n, $opt_a);
+ $snmpsess->close;
+ exit 1;
+ };
+} else {
+ if ($result->{$oid} == "0") {
+ printf ("$RELEASE_VERSION ERROR: Server %d on %s still down.
", $opt_n, $opt_a);
+ $snmpsess->close;
+ exit 1;
+ };
+};
+
+# everything's a ok
+$snmpsess->close;
+
+printf ("$RELEASE_VERSION SUCCESS: Server %d on %s changed state to %s
", $opt_n, $opt_a, $opt_o) unless defined $opt_q;
+exit 0;
+
--
1.5.6.3
 
Old 01-21-2009, 03:28 PM
"Fabio M. Di Nitto"
 
Default add Intel Modular Server fencing agent based on ibmblade fence

Hi Matthew,

On Mon, 2009-01-19 at 14:19 -0800, Matthew Kent wrote:
> ---
> fence/agents/intelmodular/Makefile | 4 +
> fence/agents/intelmodular/fence_modular.pl | 273 ++++++++++++++++++++++++++++
> 2 files changed, 277 insertions(+), 0 deletions(-)
> create mode 100644 fence/agents/intelmodular/Makefile
> create mode 100644 fence/agents/intelmodular/fence_modular.pl

did you actually write this fence agent? Is it ok for you to licence it
under GPL2+?

If so please let me know so I can update the COPYRIGHT info in the git
trees.

Fabio
 
Old 01-21-2009, 05:03 PM
"Fabio M. Di Nitto"
 
Default add Intel Modular Server fencing agent based on ibmblade fence

On Wed, 2009-01-21 at 08:39 -0800, Matthew Kent wrote:
> On Wed, 2009-01-21 at 17:28 +0100, Fabio M. Di Nitto wrote:
> > Hi Matthew,
> >
>
> Hi!
>
> > On Mon, 2009-01-19 at 14:19 -0800, Matthew Kent wrote:
> > > ---
> > > fence/agents/intelmodular/Makefile | 4 +
> > > fence/agents/intelmodular/fence_modular.pl | 273 ++++++++++++++++++++++++++++
> > > 2 files changed, 277 insertions(+), 0 deletions(-)
> > > create mode 100644 fence/agents/intelmodular/Makefile
> > > create mode 100644 fence/agents/intelmodular/fence_modular.pl
> >
> > did you actually write this fence agent? Is it ok for you to licence it
> > under GPL2+?
> >
>
> I pretty much copied the existing
> fence/agents/ibmblade/fence_ibmblade.pl with a few slight modifications.
> Assuming that doesn't create some kind of issue GPL2+ is fine with me

Ok perfect thanks. I just want to make sure that proper info and credits
are kept across different bits and pieces.

As long as we are all on the same page, it works just fine

I am keeping the mailing list in CC for historical archive records..

Fabio
 

Thread Tools




All times are GMT. The time now is 03:14 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org