<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikiold.home.tartarefr.eu/index.php?action=history&amp;feed=atom&amp;title=Service%2FCluster%2FRHCluster%2FFenceVBox</id>
	<title>Service/Cluster/RHCluster/FenceVBox - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wikiold.home.tartarefr.eu/index.php?action=history&amp;feed=atom&amp;title=Service%2FCluster%2FRHCluster%2FFenceVBox"/>
	<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Service/Cluster/RHCluster/FenceVBox&amp;action=history"/>
	<updated>2026-07-08T23:13:45Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Service/Cluster/RHCluster/FenceVBox&amp;diff=1758&amp;oldid=prev</id>
		<title>Didier : Page créée avec « &lt;syntaxhighlight lang=&quot;bash&quot;&gt; #!/bin/bash ############################################################################## #       ____              ____    _       _   _   ... »</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Service/Cluster/RHCluster/FenceVBox&amp;diff=1758&amp;oldid=prev"/>
		<updated>2013-04-15T08:29:22Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; #!/bin/bash ############################################################################## #       ____              ____    _       _   _   ... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
##############################################################################&lt;br /&gt;
#       ____              ____    _       _   _                              #&lt;br /&gt;
#      /# /_\_           |  _ \  (_)   __| | (_)   ___   _ __                #&lt;br /&gt;
#     |  |/o\o\          | | | | | |  / _` | | |  / _ \ | &amp;#039;__|               #&lt;br /&gt;
#     |  \\_/_/          | |_| | | | | (_| | | | |  __/ | |                  #&lt;br /&gt;
#    / |_   |            |____/  |_|  \__,_| |_|  \___| |_|                  #&lt;br /&gt;
#   |  ||\_ ~|                                                               #&lt;br /&gt;
#   |  ||| \/                                                                #&lt;br /&gt;
#   |  |||       Project : RedHat Cluster with VirtualBox virtual machines   #&lt;br /&gt;
#   \//  |                                                                   #&lt;br /&gt;
#    ||  |       Developper : Didier FABERT &amp;lt;dfabert@b2pweb.com&amp;gt;             #&lt;br /&gt;
#    ||_  \      Date : 2012, June                                           #&lt;br /&gt;
#    \_|  o|                                             ,__,                #&lt;br /&gt;
#     \___/      Copyright (C) 2012 by B2PWeb.com        (oo)____            #&lt;br /&gt;
#      ||||__                                            (__)    )\          #&lt;br /&gt;
#      (___)_)   File : fence_vbox                         ||--|| *          #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    This script is the cluster&amp;#039;s fence agent.                               #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    This program is free software; you can redistribute it and/or modify    #&lt;br /&gt;
#    it under the terms of the GNU General Public License as published by    #&lt;br /&gt;
#    the Free Software Foundation; either version 3 of the License, or       #&lt;br /&gt;
#    (at your option) any later version.                                     #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    This program is distributed in the hope that it will be useful,         #&lt;br /&gt;
#    but WITHOUT ANY WARRANTY; without even the implied warranty of          #&lt;br /&gt;
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           #&lt;br /&gt;
#    GNU General Public License for more details.                            #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    You should have received a copy of the GNU General Public License       #&lt;br /&gt;
#    along with this program; if not, write to the                           #&lt;br /&gt;
#    Free Software Foundation, Inc.,                                         #&lt;br /&gt;
#    51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .          #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    Script supply minimal actions:                                          #&lt;br /&gt;
#      - stop a node with VBoxManage command ( poweroff )                    #&lt;br /&gt;
#      - start a node with VBoxManage command                                #&lt;br /&gt;
#      - restart a node with VBoxManage command ( tipycally an immediate     #&lt;br /&gt;
#        stop and a start after a sleep time )                               #&lt;br /&gt;
#      - metadata which is called by cman or css_config_validate and must    #&lt;br /&gt;
#        supply a XML string to define fence options.                        #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    Script return 0 on success, 1 otherwise.                                #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    Script must be placed on /usr/sbin directory ( with other fence exec )  #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
#    cluster.conf example                                                    #&lt;br /&gt;
#    &amp;lt;clusternodes&amp;gt;                                                          #&lt;br /&gt;
#      &amp;lt;clusternode name=&amp;quot;node1.example.com&amp;quot; nodeid=&amp;quot;1&amp;quot; votes=&amp;quot;1&amp;quot;&amp;gt;           #&lt;br /&gt;
#        &amp;lt;fence&amp;gt;                                                             #&lt;br /&gt;
#          &amp;lt;method name=&amp;quot;1&amp;quot;&amp;gt;                                                 #&lt;br /&gt;
#            &amp;lt;device host=&amp;quot;node1.example.com&amp;quot; user=&amp;quot;vbox&amp;quot; name=&amp;quot;vbox&amp;quot;        #&lt;br /&gt;
#                                           vmname=&amp;quot;node1&amp;quot; action=&amp;quot;reboot&amp;quot;/&amp;gt; #&lt;br /&gt;
#          &amp;lt;/method&amp;gt;                                                         #&lt;br /&gt;
#        &amp;lt;/fence&amp;gt;                                                            #&lt;br /&gt;
#      &amp;lt;/clusternode&amp;gt;                                                        #&lt;br /&gt;
#    &amp;lt;/clusternodes&amp;gt;                                                         #&lt;br /&gt;
#    &amp;lt;fencedevices&amp;gt;                                                          #&lt;br /&gt;
#      &amp;lt;fencedevice agent=&amp;quot;fence_vbox&amp;quot; name=&amp;quot;vbox&amp;quot;/&amp;gt;                         #&lt;br /&gt;
#    &amp;lt;/fencedevices&amp;gt;                                                         #&lt;br /&gt;
#                                                                            #&lt;br /&gt;
##############################################################################&lt;br /&gt;
&lt;br /&gt;
VERSION=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
VERBOSE=0&lt;br /&gt;
logstd=0&lt;br /&gt;
logsyslog=1&lt;br /&gt;
&lt;br /&gt;
vboxmanage=&amp;quot;/usr/bin/VBoxManage&amp;quot;&lt;br /&gt;
action=&amp;quot;reboot&amp;quot;&lt;br /&gt;
sleeptime=&amp;quot;5&amp;quot;&lt;br /&gt;
user=&amp;quot;vbox&amp;quot;&lt;br /&gt;
timeout=&amp;quot;30&amp;quot;&lt;br /&gt;
host=&lt;br /&gt;
vmname=&lt;br /&gt;
&lt;br /&gt;
function show_version() {&lt;br /&gt;
        echo &amp;quot;$(basename $0) ${VERSION}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show_usage() {&lt;br /&gt;
        echo &amp;quot;Usage: $(basename $0) [args]&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show_help() {&lt;br /&gt;
        show_usage&lt;br /&gt;
        echo&lt;br /&gt;
        cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039;&lt;br /&gt;
Options:u:n&lt;br /&gt;
  -H HOSTNAME           Host which run VirtualBox&lt;br /&gt;
  -u USER               User who run VirtualBox (default=vbox)&lt;br /&gt;
  -n VBOXNAME           Name of the virtual machine (as known by VirtualBox) to&lt;br /&gt;
                        be fenced&lt;br /&gt;
  -o ACTION             Action to process on the virtual machine: on,off,reboot&lt;br /&gt;
                        (default=reboot)&lt;br /&gt;
  -t &amp;lt;timeout&amp;gt;          Fencing timeout (in seconds; default=30)&lt;br /&gt;
  -s &amp;lt;seconds&amp;gt;          Sleep time between stop and start actions for reboot&lt;br /&gt;
                        (in seconds; default=5)&lt;br /&gt;
  -?                    Help (alternate)&lt;br /&gt;
  -h                    Help&lt;br /&gt;
  -v                    Display version and exit&lt;br /&gt;
  -U                    Usage&lt;br /&gt;
  -V                    VBoxManage executable file (eventually with full path)&lt;br /&gt;
&lt;br /&gt;
With no command line argument, arguments are read from standard input.&lt;br /&gt;
Arguments read from standard input take the form of:&lt;br /&gt;
&lt;br /&gt;
    arg1=value1&lt;br /&gt;
    arg2=value2&lt;br /&gt;
&lt;br /&gt;
  vmname                Virtual Machine name (as known by virtualbox) to fence&lt;br /&gt;
  action                Fencing action (null, off, on, [reboot], status, list,&lt;br /&gt;
                        monitor, metadata)&lt;br /&gt;
  timeout               Fencing timeout (in seconds; default=30)&lt;br /&gt;
  sleeptime             Sleep time between stop and start actions for reboot&lt;br /&gt;
  vboxmanage            VBoxManage executable file ( eventually with full path )&lt;br /&gt;
EOF&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Return metadata about this fencing method. This is called by cman tools or&lt;br /&gt;
# ccs_config_validate binary to validate clusternode&amp;#039;s fence definition.&lt;br /&gt;
# eq to &amp;quot;echo &amp;#039;action=metadata&amp;#039; | fence_vbox&amp;quot;&lt;br /&gt;
function get_metadata() {&lt;br /&gt;
        cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;resource-agent name=&amp;quot;fence_vbox&amp;quot; shortdesc=&amp;quot;Fence agent for virtual machines&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;longdesc&amp;gt;fence_vbox is an I/O Fencing agent which can be used with virtual machines.&amp;lt;/longdesc&amp;gt;&lt;br /&gt;
&amp;lt;parameters&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;host&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-H&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;VirtualBox hostname which hosted vmname&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;vmname&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-n&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;Virtual Machine (as known by virtualbox) to fence&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;action&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-o&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; default=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;Fencing action (null, off, on, [reboot], status, metadata)&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;timeout&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-t&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; default=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;Fencing timeout (in seconds; default=30)&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;sleeptime&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-s&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; default=&amp;quot;5&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;Sleep time between stop and start actions for reboot (in seconds; default=5)&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;vboxmanage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-V&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; default=&amp;quot;/usr/bin/VBoxManage&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;VBoxManage executable file ( eventually with full path )&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
        &amp;lt;parameter name=&amp;quot;user&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;getopt mixed=&amp;quot;-u&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;content type=&amp;quot;string&amp;quot; default=&amp;quot;vbox&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;shortdesc lang=&amp;quot;en&amp;quot;&amp;gt;VirtualBox user ( default=vbox )&amp;lt;/shortdesc&amp;gt;&lt;br /&gt;
        &amp;lt;/parameter&amp;gt;&lt;br /&gt;
&amp;lt;/parameters&amp;gt;&lt;br /&gt;
&amp;lt;actions&amp;gt;&lt;br /&gt;
        &amp;lt;action name=&amp;quot;null&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;action name=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;action name=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;action name=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;action name=&amp;quot;metadata&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;action name=&amp;quot;status&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/actions&amp;gt;&lt;br /&gt;
&amp;lt;/resource-agent&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Check if vm can be fenced:&lt;br /&gt;
#   - check if vm name is defined&lt;br /&gt;
#   - check if virtualbox host accept ssh connection without password ( public&lt;br /&gt;
#     key of vm must be inserted in vbox user authorized_keys file on&lt;br /&gt;
#     virtualbox host )&lt;br /&gt;
#   - check if vm is managed by the specified virtualbox host&lt;br /&gt;
function check_vm() {&lt;br /&gt;
        # Check if all required arguments are defined&lt;br /&gt;
        if [ ! &amp;quot;${vmname}&amp;quot; ]&lt;br /&gt;
        then&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: error, vm name not specified.&amp;quot;&lt;br /&gt;
                [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;Error, vm name not specified.&amp;quot;&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        # Check ssh connection without password ( key only )&lt;br /&gt;
        ssh -q -o &amp;#039;BatchMode=yes&amp;#039; ${user}@${host} &amp;quot;uptime 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
        RETVAL=$?&lt;br /&gt;
        if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
        then&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: error, can&amp;#039;t connect to ${host} with user ${user} ( key only ).&amp;quot;&lt;br /&gt;
                [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;Can&amp;#039;t connect to ${host} with user ${user} ( key only ).&amp;quot;&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        # Check if vbox manage our virtual machine&lt;br /&gt;
        RETVAL=$(ssh ${user}@${host} &amp;quot;${vboxmanage} showvminfo ${vmname} 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; echo \$?&amp;quot;)&lt;br /&gt;
        if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
        then&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: error, virtual machine ${vmname} not found on ${host}.&amp;quot;&lt;br /&gt;
                if [ ${logstd} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        echo -e &amp;quot;Error, virtual machine ${vmname} not found on ${host}.\nChoose one of them:&amp;quot;&lt;br /&gt;
                        ssh ${user}@${host} &amp;quot;${vboxmanage} list vms | sed -e &amp;#039;s/{.*}//g&amp;#039; -e &amp;#039;s/\&amp;quot;//g&amp;#039;&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
        return 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get vm status&lt;br /&gt;
function status_vm() {&lt;br /&gt;
        local status=$(ssh ${user}@${host} &amp;quot;${vboxmanage} showvminfo ${vmname} | grep State | sed -e &amp;#039;s/^\s*State\s*:\s*//g&amp;#039;&amp;quot;)&lt;br /&gt;
        [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;${vmname} status: ${status}&amp;quot;&lt;br /&gt;
        [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;${vmname} status: ${status}&amp;quot;&lt;br /&gt;
        return 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Stop vm with poweroff action&lt;br /&gt;
function stop_vm() {&lt;br /&gt;
        RETVAL=$(ssh ${user}@${host} &amp;quot;${vboxmanage} controlvm ${vmname} poweroff 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; echo \$?&amp;quot;)&lt;br /&gt;
        if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
        then&lt;br /&gt;
                # Check if vm is already stopped&lt;br /&gt;
                local status=$(ssh ${user}@${host} &amp;quot;${vboxmanage} showvminfo ${vmname} | grep State | sed -e &amp;#039;s/^\s*State\s*:\s*//g&amp;#039; -e &amp;#039;s/\s*(.*)//g&amp;#039;&amp;quot;)&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: notice: ${vmname} current status \&amp;quot;${status}\&amp;quot;&amp;quot;&lt;br /&gt;
                [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;Notice: ${vmname} current status \&amp;quot;${status}\&amp;quot;&amp;quot;&lt;br /&gt;
                if [[ &amp;quot;${status}&amp;quot; == &amp;quot;powered off&amp;quot; ]]&lt;br /&gt;
                then&lt;br /&gt;
                        [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: notice: ${vmname} is already switched off, no need to do more.&amp;quot;&lt;br /&gt;
                        [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;Notice: ${vmname} is already switched off, no need to do more&amp;quot;&lt;br /&gt;
                        # no need to fence, vm is already stopped&lt;br /&gt;
                        return 0&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: error, virtual machine ${vmname} not stopped.&amp;quot;&lt;br /&gt;
                [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;Error, virtual machine ${vmname} not stopped.&amp;quot;&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
        return 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Start vm&lt;br /&gt;
function start_vm() {&lt;br /&gt;
        RETVAL=$(ssh ${user}@${host} &amp;quot;${vboxmanage} startvm ${vmname} --type headless 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; echo \$?&amp;quot;)&lt;br /&gt;
        if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
        then&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: error, virtual machine ${vmname} not started.&amp;quot;&lt;br /&gt;
                [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo &amp;quot;Error, virtual machine ${vmname} not started.&amp;quot;&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
        return 0&lt;br /&gt;
}&lt;br /&gt;
# Restart vm: Only a stop failure report an error&lt;br /&gt;
#   - stop vm&lt;br /&gt;
#   - sleep during configured time&lt;br /&gt;
#   - start vm if it&amp;#039;s possible&lt;br /&gt;
function restart_vm() {&lt;br /&gt;
        stop_vm&lt;br /&gt;
        RETVAL=$?&lt;br /&gt;
        if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
        then&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        sleep ${sleeptime}&lt;br /&gt;
        start_vm&lt;br /&gt;
        # A fencing success is a nested host stopped, start failure is not a cluster&lt;br /&gt;
        # error&lt;br /&gt;
        return 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Usefull for debug only&lt;br /&gt;
function dump() {&lt;br /&gt;
        local message=&amp;quot;try to execute action \&amp;quot;${action}\&amp;quot;&amp;quot;&lt;br /&gt;
        message=&amp;quot;${message} on vm named \&amp;quot;${vmname}\&amp;quot;&amp;quot;&lt;br /&gt;
        message=&amp;quot;${message} which is hosted by \&amp;quot;${host}\&amp;quot;&amp;quot;&lt;br /&gt;
        message=&amp;quot;${message} and running under \&amp;quot;${user}\&amp;quot; user&amp;quot;&lt;br /&gt;
        message=&amp;quot;${message}.&amp;quot;&lt;br /&gt;
        [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: debug, ${message}&amp;quot;&lt;br /&gt;
        [ ${logstd} -ne 0 ] &amp;amp;&amp;amp; echo ${message}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# check if data is available on stdin&lt;br /&gt;
if ! [ -t 0 ]&lt;br /&gt;
then&lt;br /&gt;
        # Parse data&lt;br /&gt;
        eval $(cat -)&lt;br /&gt;
        logstd=0&lt;br /&gt;
        logsyslog=1&lt;br /&gt;
else&lt;br /&gt;
        # process command line arguments&lt;br /&gt;
        while getopts &amp;quot;?hUVt:o:H:s:v:u:n:&amp;quot; opt&lt;br /&gt;
        do&lt;br /&gt;
                case &amp;quot;${opt}&amp;quot; in&lt;br /&gt;
                        H)&lt;br /&gt;
                                host=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        n)&lt;br /&gt;
                                vmname=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        o)&lt;br /&gt;
                                action=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        t)&lt;br /&gt;
                                timeout=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        V)&lt;br /&gt;
                                vboxmanage=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        s)&lt;br /&gt;
                                sleeptime=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        u)&lt;br /&gt;
                                user=${OPTARG}&lt;br /&gt;
                                ;;&lt;br /&gt;
                        U)&lt;br /&gt;
                                show_usage&lt;br /&gt;
                                exit 0&lt;br /&gt;
                                ;;&lt;br /&gt;
                        h|\?)&lt;br /&gt;
                                show_help&lt;br /&gt;
                                exit 0&lt;br /&gt;
                                ;;&lt;br /&gt;
                        v)&lt;br /&gt;
                                show_version&lt;br /&gt;
                                exit 0&lt;br /&gt;
                                ;;&lt;br /&gt;
                        *)&lt;br /&gt;
                                show_help&lt;br /&gt;
                                exit 1&lt;br /&gt;
                                ;;&lt;br /&gt;
                esac&lt;br /&gt;
        done&lt;br /&gt;
        logstd=1&lt;br /&gt;
        logsyslog=0&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
[ ${VERBOSE} -ne 0 ] &amp;amp;&amp;amp; dump&lt;br /&gt;
&lt;br /&gt;
case ${action} in&lt;br /&gt;
        #Turn on a virtual machine.&lt;br /&gt;
        on)&lt;br /&gt;
                check_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                start_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
                ;;&lt;br /&gt;
        # Destroy or turn off virtual machine.&lt;br /&gt;
        off)&lt;br /&gt;
                check_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                stop_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
                ;;&lt;br /&gt;
        # Reboot virtual machine; i.e. restart the virtual machine.&lt;br /&gt;
        reboot)&lt;br /&gt;
                check_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                restart_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
                ;;&lt;br /&gt;
        # Do absolutely nothing, but do the job perfectly.&lt;br /&gt;
        null)&lt;br /&gt;
                ;;&lt;br /&gt;
        # Print XML metadata to standard output.&lt;br /&gt;
        # Required by cman tools for validate config&lt;br /&gt;
        metadata)&lt;br /&gt;
                get_metadata&lt;br /&gt;
                ;;&lt;br /&gt;
        # Check whether a virtual machine is running or not.&lt;br /&gt;
        status)&lt;br /&gt;
                check_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                status_vm&lt;br /&gt;
                RETVAL=$?&lt;br /&gt;
                if [ ${RETVAL} -ne 0 ]&lt;br /&gt;
                then&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
                ;;&lt;br /&gt;
        # List virtual machines which may be fenced by fence_vbox&lt;br /&gt;
        #list)&lt;br /&gt;
        #       ;;&lt;br /&gt;
        # Check the health of fence_vbox backend plugin.&lt;br /&gt;
        #monitor)&lt;br /&gt;
        #       ;;&lt;br /&gt;
        *)&lt;br /&gt;
                show_usage&lt;br /&gt;
                [ ${logsyslog} -ne 0 ] &amp;amp;&amp;amp; logger &amp;quot;fence_vbox: error,try to execute an unknow action \&amp;quot;${action}\&amp;quot;.&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
                ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
</feed>