diff --git a/fencing/fence_legacy b/fencing/fence_legacy new file mode 100644 index 0000000000..824aba7d2c --- /dev/null +++ b/fencing/fence_legacy @@ -0,0 +1,169 @@ +#!/usr/bin/perl + +use Getopt::Std; + +my $ME = $0; + +END { + defined fileno STDOUT or return; + close STDOUT and return; + warn "$ME: failed to close standard output: $!\n"; + $? ||= 1; +} + +# Get the program name from $0 and strip directory names +$_=$0; +s/.*\///; +my $pname = $_; + +$opt_o = 'reset'; # Default fence action +$opt_s = 'stonith'; # Default fence binary +$opt_t = 'none'; # Default fence type +$extra_args = ''; + +sub usage +{ + print "Usage:\n"; + print "\n"; + print "$pname [options]\n"; + print "\n"; + print "Options:\n"; + print " -h usage\n"; + print " -t sub agent\n"; + print " -n nodename\n"; + print " -o Action: on | off | reset (default) | stat | list\n"; + print " -s stonith command\n"; + print " -q quiet mode\n"; + print " -V version\n"; + + exit 0; +} + +sub fail +{ + ($msg) = @_; + print $msg."\n" unless defined $opt_q; + $t->close if defined $t; + exit 1; +} + +sub fail_usage +{ + ($msg)=@_; + print STDERR $msg."\n" if $msg; + print STDERR "Please use '-h' for usage.\n"; + exit 1; +} + +sub version +{ + print "1.0.0\n"; + + exit 0; +} + +sub get_options_stdin +{ + my $opt; + my $line = 0; + while( defined($in = <>) ) + { + $_ = $in; + chomp; + + # strip leading and trailing whitespace + s/^\s*//; + s/\s*$//; + + # skip comments + next if /^#/; + + $line+=1; + $opt=$_; + next unless $opt; + + ($name,$val)=split /\s*=\s*/, $opt; + + if ( $name eq "" ) + { + print STDERR "parse error: illegal name in option $line\n"; + exit 2; + } + + # DO NOTHING -- this field is used by fenced + elsif ($name eq "agent" ) {} + + elsif ($name eq "subagent" ) + { + $opt_t = $val; + } + elsif ($name eq "action" ) + { + $opt_o = $val; + } + elsif ($name eq "nodename" ) + { + $opt_n = $val; + } + elsif ($name eq "stonith" ) + { + $opt_s = $val; + } + else + { + $extra_args="$extra_args $name=\"$val\"" + } + + } +} + +######################################################################33 +# MAIN + +if (@ARGV > 0) { + getopts("ht:n:o:s:qV") || fail_usage ; + + usage if defined $opt_h; + version if defined $opt_V; + + fail_usage "Unknown parameter." if (@ARGV > 0); + + fail_usage "No '-n' flag specified." unless defined $opt_n; + $opt_o=lc($opt_o); +0 fail_usage "Unrecognised action '$opt_o' for '-o' flag" + unless $opt_o =~ /^(on|off|reset|stat|list|monitor)$/; + +} else { + get_options_stdin(); + + fail "failed: no plug number" unless defined $opt_n; + $opt_o=lc($opt_o); + fail "failed: unrecognised action: $opt_o" + unless $opt_o =~ /^(on|off|reset|stat|list|monitor)$/; +} + +print "Performing: $opt_s -t $opt_t $extra_args -T $opt_o $opt_n\n" unless defined $opt_q; + +if ( $pid=fork() == 0 ) +{ + if ($opt_o eq "monitor" || $opt_o eq "list" ) + { + exec "$opt_s -t $opt_t $extra_args -l" or die "failed to exec \"$opt_s\"\n"; + } + elsif ($opt_o eq "stat" ) + { + exec "$opt_s -t $opt_t $extra_args -S $opt_n" or die "failed to exec \"$opt_s\"\n"; + } + else + { + exec "$opt_s -t $opt_t $extra_args -T $opt_o $opt_n" or die "failed to exec \"$opt_s\"\n"; + } +} + +wait; +$status=$?/256; + +print (($status == 0 ? "success":"failed") . ": $opt_n $status\n") + unless defined $opt_q; + +exit ($status == 0 ? 0 : 1 );