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-11-2011, 02:53 PM
Arnaud Quette
 
Default Eaton fence agent and more power devices support

Hi Marek and the list,

First of all, happy new year to you all: health, happiness and ... high availability ;-)

I've just derived a fence_eaton_snmp script, based on fence_apc_snmp.
You'll find attached the diff against the latest fence-agents repository.


This has been tested with the suitable hardware (Eaton Managed ePDU): http://www.epdu.com

Can you please merge this for the next cman releases.

As a side note, I'm thinking about:
- making one fence_pdu_snmp to group all this code (sysOID brings the smartness of knowing which data should be used), or at least create some common grounds to factorize code,

- making a fence_nut_devices (or fence_power_devices) to use NUT [1] to do the same for all supported serial / USB / SNMP / HTTP devices (ie UPS, PDU and SCD).


Feedback and comments are welcome.

cheers,
Arnaud
--
[1] http://new.networkupstools.org & http://www.networkupstools.org


--
Linux / Unix Expert R&D - Eaton - http://powerquality.eaton.com
Network UPS Tools (NUT) Project Leader - http://www.networkupstools.org/



Debian Developer - http://www.debian.org
Free Software Developer - http://arnaud.quette.free.fr/


diff --git a/configure.ac b/configure.ac
index fd441e7..639769f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -224,6 +224,7 @@ AC_CONFIG_FILES([Makefile
fence/agents/cpint/Makefile
fence/agents/drac/Makefile
fence/agents/drac5/Makefile
+ fence/agents/eaton_snmp/Makefile
fence/agents/egenera/Makefile
fence/agents/eps/Makefile
fence/agents/ibmblade/Makefile
diff --git a/fence/agents/Makefile.am b/fence/agents/Makefile.am
index 3a91ed4..945b49b 100644
--- a/fence/agents/Makefile.am
+++ b/fence/agents/Makefile.am
@@ -13,6 +13,7 @@ SUBDIRS = lib
cpint
drac
drac5
+ eaton_snmp
egenera
eps
ibmblade
diff --git a/fence/agents/eaton_snmp/Makefile.am b/fence/agents/eaton_snmp/Makefile.am
new file mode 100644
index 0000000..dad91c9
--- /dev/null
+++ b/fence/agents/eaton_snmp/Makefile.am
@@ -0,0 +1,16 @@
+MAINTAINERCLEANFILES = Makefile.in
+
+TARGET = fence_eaton_snmp
+
+EXTRA_DIST = $(TARGET).py
+ README
+
+sbin_SCRIPTS = $(TARGET)
+
+dist_man_MANS = $(TARGET).8
+
+include $(top_srcdir)/make/fencebuild.mk
+include $(top_srcdir)/make/fenceman.mk
+
+clean-local: clean-man
+ rm -f $(TARGET)
diff --git a/fence/agents/eaton_snmp/README b/fence/agents/eaton_snmp/README
new file mode 100644
index 0000000..82619d7
--- /dev/null
+++ b/fence/agents/eaton_snmp/README
@@ -0,0 +1,20 @@
+This is an snmp based fence agent for Eaton power distribution units to be used
+with RHEL4 Red Hat Cluster Suite.
+
+In order to use this agent, you will need to have net-snmp-utils installed
+on every node in your cluster. net-snmp-utils is scheduled for inclusion
+in the base RHEL distribution for Update 4, and is yummable in FC5.
+
+To use the agent, cp the agent to the /sbin directory on every
+cluster node.
+
+Then define a <fencedevice> in the cluster.conf file with
+agent="fence_eaton_snmp" as an attribute, and use it that way.
+Note, please, that the GUI does not support this agent yet, and you will have
+to edit your cluster.conf by hand and then propagate it yourself. If you need
+help with this, email me at the address below.
+
+The interface for the fence_eaton_snmp agent is identical to the existing
+fence_apc_snmp agent, upon which it has been derived.
+
+--Arnaud Quette - ArnaudQuette@Eaton.com
diff --git a/fence/agents/eaton_snmp/fence_eaton_snmp.py b/fence/agents/eaton_snmp/fence_eaton_snmp.py
new file mode 100755
index 0000000..b02cfd1
--- /dev/null
+++ b/fence/agents/eaton_snmp/fence_eaton_snmp.py
@@ -0,0 +1,177 @@
+#!/usr/bin/python
+
+# The Following agent has been tested on:
+# - Eaton ePDU managed - SNMP v1
+
+import sys, re, pexpect
+sys.path.append("@FENCEAGENTSLIBDIR@")
+from fencing import *
+from fencing_snmp import *
+
+#BEGIN_VERSION_GENERATION
+RELEASE_VERSION="Eaton SNMP fence agent"
+REDHAT_COPYRIGHT=""
+BUILD_DATE=""
+#END_VERSION_GENERATION
+
+### CONSTANTS ###
+# oid defining fence device
+OID_SYS_OBJECT_ID='.1.3.6.1.2.1.1.2.0'
+
+### GLOBAL VARIABLES ###
+# Device - see EatonManagedePDU
+device=None
+
+# Port ID
+port_id=None
+# Switch ID
+switch_id=None
+
+# Classes describing Device params
+class EatonManagedePDU:
+ status_oid= '.1.3.6.1.4.1.534.6.6.6.1.2.2.1.3.%d'
+ control_oid= '.1.3.6.1.4.1.534.6.6.6.1.2.2.1.3.%d'
+ outlet_table_oid='.1.3.6.1.4.1.534.6.6.6.1.2.2.1.1 '
+ ident_str="Eaton Managed ePDU"
+ state_off=0
+ state_on=1
+ state_cycling=2
+ turn_off=0
+ turn_on=1
+ turn_cycle=2
+ # FIXME: what's this?
+ has_switches=False
+
+### FUNCTIONS ###
+def eaton_set_device(conn,options):
+ global device
+
+ agents_dir={'.1.3.6.1.4.1.534.6.6.6':EatonManagede PDU}
+
+ # First resolve type of Eaton
+ eaton_type=conn.walk(OID_SYS_OBJECT_ID)
+
+ if (not ((len(eaton_type)==1) and (agents_dir.has_key(eaton_type[0][1])))):
+ eaton_type=[[None,None]]
+
+ device=agents_dir[eaton_type[0][1]]
+
+ conn.log_command("Trying %s"%(device.ident_str))
+
+def eaton_resolv_port_id(conn,options):
+ global port_id,switch_id,device
+
+ if (device==None):
+ eaton_set_device(conn,options)
+
+ # Now we resolv port_id/switch_id
+ if ((options["-n"].isdigit()) and ((not device.has_switches) or (options["-s"].isdigit()))):
+ port_id=int(options["-n"])
+
+ if (device.has_switches):
+ switch_id=int(options["-s"])
+ else:
+ table=conn.walk(device.outlet_table_oid,30)
+
+ for x in table:
+ if (x[1].strip('"')==options["-n"]):
+ t=x[0].split('.')
+ if (device.has_switches):
+ port_id=int(t[len(t)-1])
+ switch_id=int(t[len(t)-3])
+ else:
+ port_id=int(t[len(t)-1])
+
+ if (port_id==None):
+ fail_usage("Can't find port with name %s!"%(options["-n"]))
+
+def get_power_status(conn,options):
+ global port_id,switch_id,device
+
+ if (port_id==None):
+ eaton_resolv_port_id(conn,options)
+
+ oid=((device.has_switches) and device.status_oid%(switch_id,port_id) or device.status_oid%(port_id))
+
+ (oid,status)=conn.get(oid)
+ return (status==str(device.state_on) and "on" or "off")
+
+def set_power_status(conn, options):
+ global port_id,switch_id,device
+
+ if (port_id==None):
+ eaton_resolv_port_id(conn,options)
+
+ oid=((device.has_switches) and device.control_oid%(switch_id,port_id) or device.control_oid%(port_id))
+
+ conn.set(oid,(options["-o"]=="on" and device.turn_on or device.turn_off))
+
+
+def get_outlets_status(conn, options):
+ global device
+
+ result={}
+
+ if (device==None):
+ eaton_set_device(conn,options)
+
+ res_ports=conn.walk(device.outlet_table_oid,30)
+
+ for x in res_ports:
+ t=x[0].split('.')
+
+ port_num=((device.has_switches) and "%s:%s"%(t[len(t)-3],t[len(t)-1]) or "%s"%(t[len(t)-1]))
+
+ port_name=x[1].strip('"')
+ port_status=""
+ result[port_num]=(port_name,port_status)
+
+ return result
+
+# Define new options
+def eaton_snmp_define_defaults():
+ all_opt["snmp_version"]["default"]="1"
+ all_opt["community"]["default"]="private"
+
+# Main agent method
+def main():
+ 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","inet4_only","inet6_only",
+ "power_timeout", "shell_timeout", "login_timeout", "power_wait" ]
+
+ atexit.register(atexit_handler)
+
+ snmp_define_defaults ()
+ eaton_snmp_define_defaults()
+
+ options=check_input(device_opt,process_input(devic e_opt))
+
+ ## Support for -n [switch]:[plug] notation that was used before
+ if ((options.has_key("-n")) and (-1 != options["-n"].find(":"))):
+ (switch, plug) = options["-n"].split(":", 1)
+ if ((switch.isdigit()) and (plug.isdigit())):
+ options["-s"] = switch
+ options["-n"] = plug
+
+ if (not (options.has_key("-s"))):
+ options["-s"]="1"
+
+ docs = { }
+ docs["shortdesc"] = "Fence agent for Eaton over SNMP"
+ docs["longdesc"] = "fence_eaton_snmp is an I/O Fencing agent
+which can be used with the Eaton network power switch. It logs
+into a device via SNMP and reboots a specified outlet. It supports
+SNMP v1 and v3 with all combinations of authenticity/privacy settings."
+ docs["vendorurl"] = "http://powerquality.eaton.com"
+ show_docs(options, docs)
+
+ # Operate the fencing device
+ result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status)
+
+ sys.exit(result)
+if __name__ == "__main__":
+ main()
 
Old 01-20-2011, 11:35 AM
Marek 'marx' Grác
 
Default Eaton fence agent and more power devices support

Hi,

Arnaud Quette wrote:

Hi Marek and the list,

First of all, happy new year to you all: health, happiness and ...
high availability ;-)


I've just derived a fence_eaton_snmp script, based on fence_apc_snmp.
You'll find attached the diff against the latest fence-agents repository.

This has been tested with the suitable hardware (Eaton Managed ePDU):
http://www.epdu.com

Can you please merge this for the next cman releases.

Finally, I was able to review your code. I have few minor suggestions
how to make code be better but we can solve that later. But I can do
that later when we will have an access to this device. Fence agent will
be part of the next fence-agents package.



As a side note, I'm thinking about:
- making one fence_pdu_snmp to group all this code (sysOID brings the
smartness of knowing which data should be used), or at least create
some common grounds to factorize code,


- making a fence_nut_devices (or fence_power_devices) to use NUT [1]
to do the same for all supported serial / USB / SNMP / HTTP devices
(ie UPS, PDU and SCD).


I'm not against unfication but at least for power fencing - most of the
shared code is already in fencing library and some agents differs a lot.
Benefit of this simple agents is that we can't break anything else
and code is already simple/small enough. In the case of SNMP based fence
agents, it is possible that now as we have several such agents we can
try to implement general solution.


m,
 
Old 01-24-2011, 11:18 AM
Arnaud Quette
 
Default Eaton fence agent and more power devices support

Hi Marek,

2011/1/20 Marek 'marx' Grác
Hi,




Arnaud Quette wrote:


Hi Marek and the list,



First of all, happy new year to you all: health, happiness and ... high availability ;-)



I've just derived a fence_eaton_snmp script, based on fence_apc_snmp.

You'll find attached the diff against the latest fence-agents repository.



This has been tested with the suitable hardware (Eaton Managed ePDU): http://www.epdu.com

Can you please merge this for the next cman releases.




Finally, I was able to review your code. I have few minor suggestions how to make code be better but we can solve that later. But I can do that later when we will have an access to this device. Fence agent will be part of the next fence-agents package.

excellent, thanks.
Do you have any idea about the next official release date?
I'm still checking with Fabio to provide a suitable device for Denmark.
is it fine for you to access it that way?






As a side note, I'm thinking about:

- making one fence_pdu_snmp to group all this code (sysOID brings the smartness of knowing which data should be used), or at least create some common grounds to factorize code,





- making a fence_nut_devices (or fence_power_devices) to use NUT [1] to do the same for all supported serial / USB / SNMP / HTTP devices (ie UPS, PDU and SCD).




I'm not against unfication but at least for power fencing - most of the shared code is already in fencing library and some agents differs a lot. Benefit of this simple agents is that we can't break anything else and code is already simple/small enough. In the case of SNMP based fence agents, it is possible that now as we have several such agents we can try to implement general solution.



if you diff between fence_apc_snmp and fence_eaton_snmp, you'll see that there are few diffs.
the idea would be to merge these in a fence_pdu_snmp, since it will only be limited to adding 1 struct for addressing outlets, and 1 entry in the general table.

The thing is that, using NUT knowledge base, we would be able to add more data for other PDUs.

And a fence_nut would not be hard to create, to address all devices supported by NUT (both UPS and PDU), whenever there is already a NUT framework deployed...


Don't hesitate to ping me back once you have some time to discuss this.

cheers,
Arnaud
--
Linux / Unix Expert R&D - Eaton - http://powerquality.eaton.com

Network UPS Tools (NUT) Project Leader - http://www.networkupstools.org/
Debian Developer - http://www.debian.org

Free Software Developer - http://arnaud.quette.free.fr/
 
Old 01-24-2011, 11:47 AM
"Fabio M. Di Nitto"
 
Default Eaton fence agent and more power devices support

On 1/24/2011 1:18 PM, Arnaud Quette wrote:
> Hi Marek,
>
> 2011/1/20 Marek 'marx' Grác
>
> Hi,
>
>
> Arnaud Quette wrote:
>
> Hi Marek and the list,
>
> First of all, happy new year to you all: health, happiness and
> ... high availability ;-)
>
> I've just derived a fence_eaton_snmp script, based on
> fence_apc_snmp.
> You'll find attached the diff against the latest fence-agents
> repository.
>
> This has been tested with the suitable hardware (Eaton Managed
> ePDU): http://www.epdu.com
> Can you please merge this for the next cman releases.
>
> Finally, I was able to review your code. I have few minor
> suggestions how to make code be better but we can solve that later.
> But I can do that later when we will have an access to this device.
> Fence agent will be part of the next fence-agents package.
>
>
> excellent, thanks.
> Do you have any idea about the next official release date?

It won´t be too long before I´ll cut another upstream release. I am
waiting for Marek to push some last fixes and we should be good to go.

> I'm still checking with Fabio to provide a suitable device for Denmark.

Ok perfect, let me know how the search goes. I sent the plug spec in
another email. Shouldn´t be too hard to get it. Worst case, send me
something that supports 220v/50hz and I´ll do some surgery on other
cables

Fabio
 
Old 01-24-2011, 12:19 PM
Arnaud Quette
 
Default Eaton fence agent and more power devices support

Hi Fabio,

2011/1/24 Fabio M. Di Nitto <fdinitto@redhat.com>

On 1/24/2011 1:18 PM, Arnaud Quette wrote:

> Hi Marek,

>

> 2011/1/20 Marek 'marx' Grác

>

> * * Hi,

>

>

> * * Arnaud Quette wrote:

>

> * * * * Hi Marek and the list,

>

> * * * * First of all, happy new year to you all: health, happiness and

> * * * * ... high availability ;-)

>

> * * * * I've just derived a fence_eaton_snmp script, based on

> * * * * fence_apc_snmp.

> * * * * You'll find attached the diff against the latest fence-agents

> * * * * repository.

>

> * * * * This has been tested with the suitable hardware (Eaton Managed

> * * * * ePDU): http://www.epdu.com

> * * * * Can you please merge this for the next cman releases.

>

> * * Finally, I was able to review your code. I have few minor

> * * suggestions how to make code be better but we can solve that later.

> * * But I can do that later when we will have an access to this device.

> * * Fence agent will be part of the next fence-agents package.

>

>

> excellent, thanks.

> Do you have any idea about the next official release date?



It won´t be too long before I´ll cut another upstream release. I am

waiting for Marek to push some last fixes and we should be good to go.
*
perfect timing.
is an RPM update also scheduled?



> I'm still checking with Fabio to provide a suitable device for Denmark.



Ok perfect, let me know how the search goes. I sent the plug spec in

another email. Shouldn´t be too hard to get it. Worst case, send me

something that supports 220v/50hz and I´ll do some surgery on other

cables

well, the voltage and ouput plugs are not the issue.
but the input seems to be. I've just got in touch with our Danish representative to finalize this.

I should be able to send you an update around tomorrow.

cheers,
Arnaud
--
Linux / Unix Expert R&D - Eaton - http://powerquality.eaton.com

Network UPS Tools (NUT) Project Leader - http://www.networkupstools.org/
Debian Developer - http://www.debian.org

Free Software Developer - http://arnaud.quette.free.fr/
 
Old 01-24-2011, 12:31 PM
"Fabio M. Di Nitto"
 
Default Eaton fence agent and more power devices support

On 1/24/2011 2:19 PM, Arnaud Quette wrote:
> Hi Fabio,
>
> 2011/1/24 Fabio M. Di Nitto <fdinitto@redhat.com
> <mailto:fdinitto@redhat.com>>
>
> On 1/24/2011 1:18 PM, Arnaud Quette wrote:
> > Hi Marek,
> >
> > 2011/1/20 Marek 'marx' Grác
> >
> > Hi,
> >
> >
> > Arnaud Quette wrote:
> >
> > Hi Marek and the list,
> >
> > First of all, happy new year to you all: health, happiness and
> > ... high availability ;-)
> >
> > I've just derived a fence_eaton_snmp script, based on
> > fence_apc_snmp.
> > You'll find attached the diff against the latest fence-agents
> > repository.
> >
> > This has been tested with the suitable hardware (Eaton Managed
> > ePDU): http://www.epdu.com
> > Can you please merge this for the next cman releases.
> >
> > Finally, I was able to review your code. I have few minor
> > suggestions how to make code be better but we can solve that
> later.
> > But I can do that later when we will have an access to this
> device.
> > Fence agent will be part of the next fence-agents package.
> >
> >
> > excellent, thanks.
> > Do you have any idea about the next official release date?
>
> It won´t be too long before I´ll cut another upstream release. I am
> waiting for Marek to push some last fixes and we should be good to go.
>
>
> perfect timing.
> is an RPM update also scheduled?
>

Yes, they always come together.

> > I'm still checking with Fabio to provide a suitable device for
> Denmark.
>
> Ok perfect, let me know how the search goes. I sent the plug spec in
> another email. Shouldn´t be too hard to get it. Worst case, send me
> something that supports 220v/50hz and I´ll do some surgery on other
> cables
>
>
> well, the voltage and ouput plugs are not the issue.
> but the input seems to be. I've just got in touch with our Danish
> representative to finalize this.

If it´s a problem, as long as voltage and output plugs do match, I can
handmade a cable. Let´s not make it too complicated.

> I should be able to send you an update around tomorrow.

Ok perfect.

thanks
Fabio
 

Thread Tools




All times are GMT. The time now is 04:27 AM.

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