Fwd: [Linux-cluster] Fence VirtualIron - i have the script but...

Maurizio Rottin maurizio.rottin at gmail.com
Fri Nov 14 14:31:37 UTC 2008


it seems that i lost the mailing list address...then i forward the
answer to Nuno Fernandes.

And Nuno, please, write after this thread if you make some
improvments, i'll be glad to discuss bugs/improvements/ideas.

Bye!

---------- Forwarded message ----------
From: Maurizio Rottin <maurizio.rottin at gmail.com>
Date: 2008/11/14
Subject: Re: [Linux-cluster] Fence VirtualIron - i have the script but...
To: Nuno Fernandes <npf-mlists at eurotux.com>


2008/11/14 Nuno Fernandes <npf-mlists at eurotux.com>:
> We also use virtual iron. Could you please post your script?
>
> Thanks,
>
> Nuno Fernandes

first of all you must have a working java>1.5.0

than (mind that my scripts are little "temporary")

vim /sbin/fence_vivm
#!/bin/bash
# Maurizio Rottin 2008-11-11
#
# fence a VirtualIron VirtualServer
#
###############################################################################
#
# Copyright (C) 2008 Maurizio Rottin.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2, as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
# or visit http://www.gnu.org/licenses/gpl.txt
#
###############################################################################

#must parse arguments passed from stdin
#in format name=param
#must ignore #name=param
#there should not be two name=param string passed, as the xml should
be considered bad!
name=""
vm=""
while read param;do
       if [ `expr index $param \# ` -ne 0 ];then
               continue
       elif expr match $param 'ip=.*' >/dev/null ;then
               ip=${param#ip=}
       elif expr match $param 'name=.*'  >/dev/null ;then
               name=${param#name=}
       elif expr match $param 'vm=.*'  >/dev/null ;then
               vm=${param#vm=}
       fi
done
#end parsing
if [ "$vm" == "" ];then
       echo "$$: No name provided!"
       exit 1
fi
basedir="/root/vso"

if [ -d $basedir ];then
       cd /root/vso
       sh ./runner --vivmgr=http://youripaddress:80  --username=admin
--password='yourpassword' --inputfile=vsOperations.py --action=fence
--vs="${vm}"
       retval=$?
else
       retval=1
fi
exit $retval
->>>>end of script

of course you can pass also password, ip and so on, depending on your needs.


then you must copy this files from VirtualIron directory into
/root/vso (if you change /root/vso, then change it also in the
fence_vivm)


./system
./system/resources
./system/resources/lib
./system/resources/lib/myoocomClient.jar
./system/resources/lib/MgmtAPI.jar
./system/resources/lib/MgmtUtil.jar
./system/resources/lib/runner.jar
./system/resources/lib/jython.jar
./system/resources/lib/log4j.jar
./system/resources/lib/MgmtControl.jar
./system/resources/lib/jline.jar
./system/resources/lib/MgmtTools.jar
./system/resources/lib/myoodbClient.jar
./etc
./etc/runner.properties


ok, now we need two more scripts

This is taken from VirtualIron so i don't know if some licences are involved.

vim /root/vso/runner
#!/bin/bash
export INS_PATH=`pwd`

#
# run in the context of the install
#
cd "$INS_PATH"

#
#   usage: runner.sh --mode=<jython|sql>
#
#          --mode      : default is <jython>
#          --vivmgr    : default is <tcp://localhost:54321>
#          --username  : default is <admin>
#          --password  : default is <admin>
#          --inputfile : default is <interactive>
#
#          --help      : print usage
#

java -Xmx512m -Dpython.inclusive.packages="java,javax,org.python" -jar
"system/resources/lib/runner.jar" $*
exit $?
->>> end script
chmod 700 /root/vso/runner

AND

taken from VirtualIron scripts and modified for our needs:

vim /root/vso/vsOperations.py
#
# vsOperations: perform start/stop/shutdown/restart action on VirtualServer
#
from com.virtualiron.vce.mgmt.api import VirtualizationManager
from com.virtualiron.vce.mgmt.api.virtual import VirtualServer
import java.lang
import java.util
import os
import string
import sys
import traceback

def Usage():
       if os.name == 'nt':
               command = 'runner.bat'
       else:
               command = 'runner.sh'
       print 'Usage: %s --inputfile=vsOperations.py --vs="Virtual
Server" --action=[start,stop,shutdown,restart]' % (command)
       print 'or Usage: %s --vivmgr=http://192.168.0.48:80
--username=admin --password=\'dba at iron\' --inputfile=vsOperations.py
--action=[start,stop,shutdown,restart,reboot]' % (command)
       sys.exit(1)

#
# parse command line arguments
#
vsName = None
action = None
for arg in sys.argv[1:]:
       if string.find(arg, "--vs=") != -1:
               tokens = string.splitfields(arg, "=")
               vsName = tokens[1]

       elif string.find(arg, "--action=") != -1:
               tokens = string.splitfields(arg, "=")
               action = tokens[1]

#
# check if required arguments were specified
#
if vsName is None or action is None:
       Usage()

#
# get connection to Database
#
configurationManager = VirtualizationManager.getConfigurationManager()

#
# find virtual server object
#
vs = configurationManager.findObject(VirtualServer, vsName)
if vs is None:
       print 'FAIL to find VirtualServer %s' % (vsName)
       sys.exit(1)

#
# wrap VS action in job control
#
error = 0
try:
       jobName = java.lang.Long.toString(configurationManager.getLocalTime())
       job = configurationManager.createJob(jobName)
       job.begin()

       if action == 'start':
               vs.start()
               job.addOperationDescription("Start VirtualServer", vs, vs, vs)
       elif action == 'stop':
               vs.stop()
               job.addOperationDescription("Stop VirtualServer", vs, vs, vs)
       elif action == 'shutdown':
               vs.shutdown()
               job.addOperationDescription("Shutdown VirtualServer",
vs, vs, vs)
       elif action == 'restart':
               vs.restart()
               job.addOperationDescription("Restart VirtualServer", vs, vs, vs)
       elif action == 'reboot':
               vs.reboot()
               job.addOperationDescription("Hard reset and boot
VirtualServer", vs, vs, vs)
       elif action == 'fence':
               statusEvent = vs.getStatusEvent().toString()
               if string.find(statusEvent, 'VirtualServerStoppedEvent') == 0:
                       print "fence: starting"
                       vs.start()
                       job.addOperationDescription("Fence Start
VirtualServer", vs, vs, vs)
               elif string.find(statusEvent, 'VirtualServerRunningEvent') == 0:
                       print "fence: rebooting"
                       vs.reboot()
                       job.addOperationDescription("Fence reboot
VirtualServer", vs, vs, vs)
               elif string.find(statusEvent,
'VirtualServerStartingEvent') == 0:
                       print "wait 60 sec reboot()? or do nothing?"
               else:
                       print "Unknown status %s " % (statusEvent)
       else:
               error = 1
               print 'Unknown action:', action
               job.abort()

       if not error:
               job.commit()            # commit job

except java.lang.Throwable, throw:
       job.abort()             # if job fails, rollback
       throw.printStackTrace()
except:
       job.abort()             # if job fails, rollback
       traceback.print_exc()

if error:
       Usage()

->>> end script

chmod 700 /root/vso/vsOperations.py


Last thing is to modify the cluster.conf
copy your cluster.conf somewhere
add plus 1 to "config_version=number"

the beginning should look like this:
<------begin
<?xml version="1.0"?>
<cluster alias="VironLab" config_version="33" name="VironLab">
       <fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="3"/>
       <clusternodes>
               <clusternode name="bend02.viron.local" nodeid="1" votes="1">
                       <fence>
                               <method name="1">
                                       <device name="bend02"/>
                               </method>
                       </fence>
               </clusternode>
               <clusternode name="bend01.viron.local" nodeid="2" votes="1">
                       <fence>
                               <method name="1">
                                       <device name="bend01"/>
                               </method>
                       </fence>
               </clusternode>
       </clusternodes>
       <cman expected_votes="1" two_node="1"/>
       <fencedevices>
               <fencedevice agent="fence_vivm" name="bend02" vm="bend_02"/>
               <fencedevice agent="fence_vivm" name="bend01" vm="bend_01"/>
       </fencedevices>
       <rm>
--------->cut<-------

where "bend_02" and "bend_01" are the real names in the VirtualIron manager!

update the cluste.conf while the cluster is running:
ccs_tool update cluster.conf


enjoy it!

--
mr



-- 
mr




More information about the Linux-cluster mailing list