#!/usr/bin/perl ############################################################################### ############################################################################### ## ## Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. ## Copyright (C) 2004 Red Hat, Inc. All rights reserved. ## ## This copyrighted material is made available to anyone wishing to use, ## modify, copy, or redistribute it subject to the terms and conditions ## of the GNU General Public License v.2. ## ############################################################################### ############################################################################### use Getopt::Std; use VMware::VIM2Runtime; # Get the program name from $0 and strip directory names $_=$0; s/.*\///; my $pname = $_; # WARNING!! Do not add code bewteen "#BEGIN_VERSION_GENERATION" and # "#END_VERSION_GENERATION" It is generated by the Makefile #BEGIN_VERSION_GENERATION $FENCE_RELEASE_NAME="2.0.64"; $REDHAT_COPYRIGHT=("Copyright (C) Red Hat, Inc. 2004 All rights reserved."); $BUILD_DATE="(built Thu Jun 28 07:25:05 EDT 2007)"; #END_VERSION_GENERATION sub usage { print "Usage:\n\n"; print "$pname [options]\n\n"; print "Options:\n"; print " -a IP address or hostname of VirtualCenter server\n"; print " -h Usage\n"; print " -n Virtual machine name to reset\n"; print " -l Login name for VirtualCenter server\n"; print " -p Password for login\n"; print " -V version\n\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 "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n"; print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT ); exit 0; } if (@ARGV > 0) { getopts("a:hn:l:p:V") || fail_usage ; usage if defined $opt_h; version if defined $opt_V; fail_usage "Unknown parameter." if (@ARGV > 0); fail_usage "No '-a' flag specified." unless defined $opt_a; fail_usage "No '-l' flag specified." unless defined $opt_l; fail_usage "No '-p' flag specified." unless defined $opt_p; fail_usage "No '-n' flag specified." unless defined $opt_n; } else { get_options_stdin(); fail "failed: no IP/host address for the VirtualCenter." unless defined $opt_a; fail "failed: no login name provided." unless defined $opt_l; fail "failed: no password provided." unless defined $opt_p; fail "failed: no VM name specified." unless defined $opt_n; } # # Set up and log in # Vim::login(service_url=>"https://$opt_a/sdk/vimService", user_name=>"$opt_l", password=>"$opt_p"); # # Do the command # my $vm_view = Vim::find_entity_view(view_type => 'VirtualMachine', filter => {name => $opt_n}); if (!$vm_view) { fail "Virtual Machine name not found."; } $vm_view->ResetVM(); Vim::logout(); print "success: VM: $opt_n reset.\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("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 "login" ) { $opt_l = $val; } elsif ($name eq "ipaddr" ) { $opt_a = $val; } elsif ($name eq "name" ) { } elsif ($name eq "passwd" ) { $opt_p = $val; } elsif ($name eq "port" ) { $opt_n = $val; } } }