Hi Florian, Applied:
changeset: 12369:a05efba63c10 tag: tip user: Florian Haas <[email protected]> date: Wed Apr 08 18:04:01 2009 +0200 summary: High: RA: AoEtarget: new RA to export ATA-over-Ethernet (AoE) targets Cheers, Dejan On Wed, Apr 01, 2009 at 10:53:31AM +0200, Florian Haas wrote: > # HG changeset patch > # User Florian Haas <[email protected]> > # Date 1238513356 -7200 > # Node ID 3e70a98404147097d446cc9592fb93d262645dc7 > # Parent 7b68f335ad30a7b55b05d70f9dbed8b384484a6a > RA AoEtarget: an RA to export ATA-over-Ethernet (AoE) targets. > > This is an RA to export and manage local block devices (or files) as > ATA-over-Ethernet (AoE) targets. Local block devices are exported over > the specified Ethernet interface using the given shelf and slot > number. > > This implementation uses the vblade utility to export AoE targets. See > http://aoetools.sourceforge.net for details. > > > Limitations: > > - Unlike IP based storage protocols such as iSCSI, AoE is non-routable > and is limited to a single Ethernet segment (this may also be an > advantage in terms of security). > - Industry support (i.e. native support from hardware vendors) for AoE > is fairly limited at the time of writing, as compared to iSCSI. > - Several handy features in the SCSI stack, implemented to varying > extents in several iSCSI implementations, are absent from AoE. > - AoE has a limited, crude security model based on initiator Ethernet > address. > > > Advantages: > > - Very lightweight storage protocol. > - May outperform iSCSI in some configurations. > - AoE target export lives entirely in userspace. By contrast, some > iSCSI implementations are part userspace, part kernel. > - The service not being IP based, failover is not tied to IP address > failover and/or Gratuitous ARP. > > > Caveats: > > - Neither vblade nor this RA protects against one device being > exported multiple times with different shelf and slot numbers. > - Neither vblade nor this RA protects against multiple devices being > exported with the same shelf and slot numbers. > > diff -r 7b68f335ad30 -r 3e70a9840414 debian/heartbeat.install > --- a/debian/heartbeat.install Tue Mar 24 14:48:41 2009 +0100 > +++ b/debian/heartbeat.install Tue Mar 31 17:29:16 2009 +0200 > @@ -8,6 +8,7 @@ > usr/lib/ocf/resource.d/heartbeat/.ocf-directories > usr/lib/ocf/resource.d/heartbeat/.ocf-returncodes > usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs > +usr/lib/ocf/resource.d/heartbeat/AoEtarget > usr/lib/ocf/resource.d/heartbeat/AudibleAlarm > usr/lib/ocf/resource.d/heartbeat/ClusterMon > usr/lib/ocf/resource.d/heartbeat/Delay > diff -r 7b68f335ad30 -r 3e70a9840414 resources/OCF/AoEtarget > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/resources/OCF/AoEtarget Tue Mar 31 17:29:16 2009 +0200 > @@ -0,0 +1,253 @@ > +#!/bin/bash > +# > +# > +# AoEtarget OCF RA. > +# Manages an ATA-over-Ethernet (AoE) target utilizing the vblade utility. > +# > +# Copyright (c) 2009 LINBIT HA-Solutions GmbH, Florian Haas > +# All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of version 2 of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, but > +# WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > +# > +# Further, this software is distributed without any warranty that it is > +# free of the rightful claim of any third person regarding infringement > +# or the like. Any license provided herein, whether implied or > +# otherwise, applies only to this software file. Patent licenses, if > +# any, provided herein do not apply to combinations of this program with > +# other software, or any other product whatsoever. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. > +# > + > +###################################################################### > +# Initialization: > + > +. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs > +LC_ALL="C" > +LANG="C" > + > +# Defaults > +OCF_RESKEY_nic_default="eth0" > +OCF_RESKEY_pid_default="${HA_RSCTMP}/AoEtarget-${OCF_RESOURCE_INSTANCE}.pid" > +OCF_RESKEY_binary_default="/usr/sbin/vblade" > + > +: ${OCF_RESKEY_nic=${OCF_RESKEY_nic_default}} > +: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}} > +: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}} > + > +####################################################################### > + > +meta_data() { > + cat <<EOF > +<?xml version="1.0" encoding="UTF-8"?> > +<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> > +<resource-agent name="AoEtarget" version="0.1"> > + <version>1.0</version> > + <longdesc lang="en"> > +This resource agent manages an ATA-over-Ethernet (AoE) target using vblade. > +It exports any block device, or file, as an AoE target using the > +specified Ethernet device, shelf, and slot number. > +</longdesc> > + <shortdesc lang="en">ATA-over-Ethernet (AoE) target agent</shortdesc> > + <parameters> > + <parameter name="device" required="1"> > + <longdesc lang="en"> > +The local block device (or file) to export as an AoE target. > +</longdesc> > + <shortdesc lang="en">Device to export</shortdesc> > + <content type="string"/> > + </parameter> > + <parameter name="nic" required="1"> > + <longdesc lang="en"> > +The local Ethernet interface to use for exporting this AoE target. > +</longdesc> > + <shortdesc lang="en">Ethernet interface</shortdesc> > + <content type="string" default="${OCF_RESKEY_nic_default}"/> > + </parameter> > + <parameter name="shelf" required="1"> > + <longdesc lang="en"> > +The AoE shelf number to use when exporting this target. > +</longdesc> > + <shortdesc lang="en">AoE shelf number</shortdesc> > + <content type="integer"/> > + </parameter> > + <parameter name="slot" required="1"> > + <longdesc lang="en"> > +The AoE slot number to use when exporting this target. > +</longdesc> > + <shortdesc lang="en">AoE slot number</shortdesc> > + <content type="integer"/> > + </parameter> > + <parameter name="pid" required="0" unique="1"> > + <longdesc lang="en"> > +The file to record the daemon pid to. > +</longdesc> > + <shortdesc lang="en">Daemon pid file</shortdesc> > + <content type="string" default="${OCF_RESKEY_pid_default}"/> > + </parameter> > + <parameter name="binary" required="0"> > + <longdesc lang="en"> > +Location of the vblade binary. > +</longdesc> > + <shortdesc lang="en">vblade binary</shortdesc> > + <content type="string" default="${OCF_RESKEY_binary_default}"/> > + </parameter> > + </parameters> > + <actions> > + <action name="start" timeout="15"/> > + <action name="stop" timeout="15"/> > + <action name="monitor" timeout="15" interval="10" depth="0" > start-delay="0"/> > + <action name="reload" timeout="15"/> > + <action name="meta-data" timeout="5"/> > + <action name="validate-all" timeout="15"/> > + </actions> > +</resource-agent> > +EOF > +} > + > +####################################################################### > + > +# don't exit on TERM, to test that lrmd makes sure that we do exit > +trap sigterm_handler TERM > +sigterm_handler() { > + ocf_log info "They use TERM to bring us down. No such luck." > + return > +} > + > +AoEtarget_usage() { > + cat <<END > +usage: $0 {start|stop|status|monitor|validate-all|meta-data} > + > +Expects to have a fully populated OCF RA-compliant environment set. > +END > +} > + > +AoEtarget_start() { > + AoEtarget_monitor > + if [ $? = $OCF_SUCCESS ]; then > + return $OCF_SUCCESS > + fi > + ocf_log info "Exporting device ${OCF_RESKEY_device} on ${OCF_RESKEY_nic} > as shelf ${OCF_RESKEY_shelf}, slot ${OCF_RESKEY_slot}" > + ${OCF_RESKEY_binary} ${OCF_RESKEY_shelf} ${OCF_RESKEY_slot} \ > + ${OCF_RESKEY_nic} ${OCF_RESKEY_device} 2>&1 & > + rc=$? > + pid=$! > + if [ $rc -ne 0 ]; then > + return $OCF_ERR_GENERIC > + fi > + echo $pid > ${OCF_RESKEY_pid} && return $OCF_SUCCESS > + return $OCF_ERR_GENERIC > +} > + > +AoEtarget_stop() { > + AoEtarget_monitor > + if [ $? -eq $OCF_SUCCESS ]; then > + ocf_log info "Unxporting device ${OCF_RESKEY_device} on > ${OCF_RESKEY_nic} as shelf ${OCF_RESKEY_shelf}, slot ${OCF_RESKEY_slot}" > + pid=$(cat ${OCF_RESKEY_pid}) > + kill -TERM $pid > + # loop until we're really stopped, wait for the LRM to time us > + # out if not > + while AoEtarget_monitor; do > + sleep 1 > + done > + fi > + # Clean up pid file > + rm -f ${OCF_RESKEY_pid} > + return $OCF_SUCCESS > +} > + > +AoEtarget_monitor() { > + ocf_pidfile_status ${OCF_RESKEY_pid} >/dev/null 2>&1 > + rc=$? > + if [ $rc -eq 2 ]; then > + # no pid file, must assume we're not running > + return $OCF_NOT_RUNNING > + elif [ $rc -eq 1 ]; then > + # stale pid file, assume something went wrong > + return $OCF_ERR_GENERIC > + fi > + return $OCF_RUNNING > +} > + > +AoEtarget_validate() { > + # Is our binary executable? > + if [ ! -x ${OCF_RESKEY_binary} ]; then > + ocf_log error "${OCF_RESKEY_binary} not found or not executable" > + return $OCF_ERR_INSTALLED > + fi > + > + # Do we have all required variables? > + for var in device nic shelf slot pid; do > + param="OCF_RESKEY_${var}" > + if [ -z "${!param}" ]; then > + ocf_log error "Missing resource parameter \"$var\"!" > + return $OCF_ERR_CONFIGURED > + fi > + done > + > + # Is the pid file directory writable? > + pid_dir=`dirname "$OCF_RESKEY_pid"` > + touch "$pid_dir/$$" > + if [ $? != 0 ]; then > + ocf_log error "Cannot create pid file in $pid_dir -- check directory > permissions" > + return $OCF_ERR_INSTALLED > + fi > + rm "$pid_dir/$$" > + > + # Does the device we are trying to export exist? > + if [ ! -e ${OCF_RESKEY_device} ]; then > + ocf_log error "${OCF_RESKEY_device} does not exist" > + return $OCF_ERR_INSTALLED > + fi > + return $OCF_SUCCESS > +} > + > +case $1 in > + meta-data) > + meta_data > + exit $OCF_SUCCESS > + ;; > + usage|help) > + AoEtarget_usage > + exit $OCF_SUCCESS > + ;; > +esac > + > +# Everything except usage and meta-data must pass the validate test > +AoEtarget_validate || exit $? > + > +case $__OCF_ACTION in > + start) > + AoEtarget_start > + ;; > + stop) > + AoEtarget_stop > + ;; > + status|monitor) > + AoEtarget_monitor > + ;; > + reload) > + ocf_log err "Reloading..." > + AoEtarget_start > + ;; > + validate-all) > + AoEtarget_validate > + ;; > + *) > + AoEtarget_usage > + exit $OCF_ERR_UNIMPLEMENTED > + ;; > +esac > + > +rc=$? > +ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc" > +exit $rc > + > diff -r 7b68f335ad30 -r 3e70a9840414 resources/OCF/Makefile.am > --- a/resources/OCF/Makefile.am Tue Mar 24 14:48:41 2009 +0100 > +++ b/resources/OCF/Makefile.am Tue Mar 31 17:29:16 2009 +0200 > @@ -48,6 +48,7 @@ > IPaddr2 \ > drbd \ > anything \ > + AoEtarget \ > apache \ > AudibleAlarm \ > db2 \ > _______________________________________________________ > Linux-HA-Dev: [email protected] > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > Home Page: http://linux-ha.org/ _______________________________________________________ Linux-HA-Dev: [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/
