public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
From: Jan Friesse <honzaf@fedoraproject.org>
To: cluster-cvs-relay@redhat.com
Subject: cluster: STABLE3 - fence_intelmodular: Rewrite of agent under Python unified library
Date: Wed, 11 Mar 2009 12:06:00 -0000	[thread overview]
Message-ID: <20090311120611.243A11201EB@lists.fedorahosted.org> (raw)

Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=ea383bee91589d194f033aa92e16c07c7748c06c
Commit:        ea383bee91589d194f033aa92e16c07c7748c06c
Parent:        e467f34fea8c00f4279eb008ab4506000b5723fe
Author:        Jan Friesse <jfriesse@redhat.com>
AuthorDate:    Wed Mar 11 13:05:54 2009 +0100
Committer:     Jan Friesse <jfriesse@redhat.com>
CommitterDate: Wed Mar 11 13:05:54 2009 +0100

fence_intelmodular: Rewrite of agent under Python unified library

Main functionality should be kept (thanks Matthew for
testing), and has some new features, like list, metadata, ...
---
 fence/agents/intelmodular/Makefile              |    4 +
 fence/agents/intelmodular/fence_intelmodular.py |   86 +++++++++++++++
 fence/man/Makefile                              |    3 +-
 fence/man/fence_intelmodular.8                  |  131 +++++++++++++++++++++++
 4 files changed, 223 insertions(+), 1 deletions(-)

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_intelmodular.py b/fence/agents/intelmodular/fence_intelmodular.py
new file mode 100644
index 0000000..8cfa0ae
--- /dev/null
+++ b/fence/agents/intelmodular/fence_intelmodular.py
@@ -0,0 +1,86 @@
+#!/usr/bin/python
+
+# Tested with an Intel MFSYS25 using firmware package 2.6 Should work with an
+# MFSYS35 as well.
+#
+# 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.
+#
+# Thanks Matthew Kent for original agent and testing.
+
+import sys, re, pexpect
+from fencing import *
+from fencing_snmp import *
+
+#BEGIN_VERSION_GENERATION
+RELEASE_VERSION="Intel Modular SNMP fence agent"
+REDHAT_COPYRIGHT=""
+BUILD_DATE=""
+#END_VERSION_GENERATION
+
+### CONSTANTS ###
+# From INTELCORPORATION-MULTI-FLEX-SERVER-BLADES-MIB.my that ships with
+# firmware updates
+STATUSES_OID=".1.3.6.1.4.1.343.2.19.1.2.10.202.1.1.6"
+
+# Status constants returned as value from SNMP
+STATUS_UP=2
+STATUS_DOWN=0
+
+# Status constants to set as value to SNMP
+STATUS_SET_ON=2
+STATUS_SET_OFF=3
+
+### FUNCTIONS ###
+
+def get_power_status(conn,options):
+	(oid,status)=conn.get("%s.%s"%(STATUSES_OID,options["-n"]))
+	return (status==str(STATUS_UP) and "on" or "off")
+
+def set_power_status(conn, options):
+	conn.set("%s.%s"%(STATUSES_OID,options["-n"]),(options["-o"]=="on" and STATUS_SET_ON or STATUS_SET_OFF))
+
+def get_outlets_status(conn, options):
+	result={}
+
+	res_blades=conn.walk(STATUSES_OID,30)
+
+	for x in res_blades:
+		port_num=x[0].split('.')[-1]
+
+		port_alias=""
+		port_status=(x[1]==str(STATUS_UP) and "on" or "off")
+
+		result[port_num]=(port_alias,port_status)
+
+	return result
+
+# Define new options
+def intelmodular_define_defaults():
+	all_opt["snmp_version"]["default"]="1"
+
+# Main agent method
+def main():
+	global port_oid
+
+	device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug",
+		       "action", "ipaddr", "login", "passwd", "passwd_script",
+		       "test", "port", "separator", "no_login", "no_password",
+		       "snmp_version", "community", "snmp_auth_prot", "snmp_sec_level",
+		       "snmp_priv_prot", "snmp_priv_passwd", "snmp_priv_passwd_script",
+		       "udpport"]
+
+	atexit.register(atexit_handler)
+
+	intelmodular_define_defaults()
+
+	options=check_input(device_opt,process_input(device_opt))
+
+	# Operate the fencing device
+	fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status)
+
+if __name__ == "__main__":
+	main()
diff --git a/fence/man/Makefile b/fence/man/Makefile
index 2baf083..3626f5a 100644
--- a/fence/man/Makefile
+++ b/fence/man/Makefile
@@ -19,6 +19,7 @@ TARGET += \
 	fence_ibmblade.8 \
 	fence_ifmib.8 \
 	fence_ilo.8 \
+	fence_intelmodular.8 \
 	fence_ipmilan.8 \
 	fence_ldom.8 \
 	fence_manual.8 \
@@ -29,8 +30,8 @@ TARGET += \
 	fence_rsb.8 \
 	fence_sanbox2.8 \
 	fence_scsi.8 \
-	fence_vixel.8 \
 	fence_virsh.8 \
+	fence_vixel.8 \
 	fence_vmware.8 \
 	fence_wti.8 \
 	fence_xcat.8 \
diff --git a/fence/man/fence_intelmodular.8 b/fence/man/fence_intelmodular.8
new file mode 100644
index 0000000..a013a7f
--- /dev/null
+++ b/fence/man/fence_intelmodular.8
@@ -0,0 +1,131 @@
+.TH fence_intelmodular 8
+
+.SH NAME
+fence_intelmodular - I/O Fencing agent for Intel MFSYS SNMP devices
+
+.SH SYNOPSIS
+.B
+fence_intelmodular
+[\fIOPTION\fR]...
+
+.SH DESCRIPTION
+fence_intelmodular is an I/O Fencing agent which can be used with
+Intel Modular device (tested on Intel MFSYS25, should work with
+MFSYS35 as well). Agent internally uses snmpget, snmpset and snmpwalk command.
+
+fence_intelmodular accepts options on the command line as well as from stdin.
+Fenced sends parameters through stdin when it execs the agent.  fence_intelmodular can be run by itself with command line options.  This is useful for testing.
+
+.SH OPTIONS
+.TP
+\fB-a\fP \fIIPaddress\fR
+IP address or hostname of the SNMP device. Can be used any syntax supported by snmpget.
+.TP
+\fB-h\fP
+Print out a help message describing available options, then exit.
+.TP
+\fB-c\fP \fIcommunity\fR
+The read/write community string to be used in the request.
+.TP
+\fB-n\fP \fIname\fR
+Name of port to fence or ifIndex.
+.TP
+\fB-p\fP \fIpassword\fR
+Password for login for SNMP v3 (authentication protocol pass phrase).
+.TP
+\fB-P\fP \fIpassword\fR
+Password for privacy for SNMP v3 (privacy protocol password).
+.TP
+\fB-S\fP \fIscript\fR
+Script to run to retrieve password for login for SNMP v3 (authentication protocol pass phrase).
+.TP
+\fB-R\fP \fIscript\fR
+Script to run to retrieve privacy for SNMP v3 (privacy protocol password).
+.TP
+\fB-l\fP \fIlogin\fR
+Login name for SNMP v3 (security name).
+.TP
+\fB-d\fP \fIversion\fR
+SNMP version (1,2c,3). Default is 1.
+.TP
+\fB-b\fP \fIauth_protocol\fR
+SNMP authentication protocol (MD5|SHA).
+.TP
+\fB-E\fP \fIsec_level\fR
+SNMP security level (noAuthNoPriv|authNoPriv|authPriv).
+.TP
+\fB-B\fP \fIpriv_protocol\fR
+SNMP privacy protocol (DES|AES).
+.TP
+\fB-u\fP \fIudp_port\fR
+UDP/TCP port to use.
+.TP
+\fB-o\fP \fIaction\fR
+The action required.  off (default), on, status, list or monitor. Deprecated
+options (enable -> on and disable -> off) can be used too.
+.TP
+\fB-v\fP
+Verbose. Record session to stdout, or debug file if specified (see -D).
+.TP
+\fB-D\fP
+Specifies file, where will be written debug messages from session.
+.TP
+\fB-V\fP
+Print out a version message, then exit.
+
+.SH STDIN PARAMETERS
+.TP
+\fIagent = < param >\fR
+This option is used by fence_node(8) and is ignored by fence_intelmodular.
+.TP
+\fIipaddr = < param >\fR
+IP address or hostname of the SNMP device. Can be used any syntax supported by snmpget.
+.TP
+\fIcommunity = < param >\fR
+The read/write community string to be used in the request.
+.TP
+\fIport = < param >\fR
+Name of port to fence or ifIndex.
+.TP
+\fIpasswd = < param >\fR
+Password for login for SNMP v3 (authentication protocol pass phrase).
+.TP
+\fIsnmp_priv_passwd\fR
+Password for privacy for SNMP v3 (privacy protocol password).
+.TP
+\fIpasswd_script = < param >\fR
+Script to run to retrieve password for login for SNMP v3 (authentication protocol pass phrase).
+.TP
+\fIsnmp_priv_passwd_script = < param>\fR
+Password for privacy for SNMP v3 (privacy protocol password).
+.TP
+\fIlogin = < param >\fR
+Login name for SNMP v3 (security name).
+.TP
+\fIsnmp_version = < param >\fR
+SNMP version (1,2c,3). Default is 1.
+.TP
+\fIsnmp_auth_prot = < param >\fR
+SNMP authentication protocol (MD5|SHA).
+.TP
+\fIsnmp_sec_level = < param >\fR
+SNMP security level (noAuthNoPriv|authNoPriv|authPriv).
+.TP
+\fIsnmp_priv_prot = < param >\fR
+SNMP privacy protocol (DES|AES).
+.TP
+\fIudpport = < param >\fR
+UDP/TCP port to use.
+.TP
+\fIaction = < param >\fR
+The action required.  off (default), on, status, list or monitor. Deprecated
+options (enable -> on and disable -> off) can be used too.
+.TP
+\fIverbose = < param >\fR
+Verbose.  Record session to stdout, or debug file if specified (see debug).
+.TP
+\fIdebug = < param >\fR
+Specifies file, where will be written debug messages from session.
+
+.SH SEE ALSO
+fence(8), fence_node(8)


                 reply	other threads:[~2009-03-11 12:06 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090311120611.243A11201EB@lists.fedorahosted.org \
    --to=honzaf@fedoraproject.org \
    --cc=cluster-cvs-relay@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).