
Untitled
By: a guest on
Apr 20th, 2011 | syntax:
Perl | size: 2.32 KB | views:
99 | expires: Never
#!/usr/bin/perl
use Net::Ping;
use RPC::XML;
use RPC::XML::Client;
my $xenhost = $ARGV[0];
my $user = $ARGV[1];
my $passwd = $ARGV[2];
my $xenport = 80;
my $state = {
"Running" => "ON",
"Halted" => "OFF",
"Suspended" => "SUSPENDED",
"Paused" => "SUSPENDED",
"Unknown" => "UNKNOWN"
};
my %hash=();
# Establish the XEN API connection
my $xen = RPC::XML::Client->new("http://$xenhost:$xenport");
my $session = extractvalue($xen->simple_request("session.login_with_password",
$user,$passwd));
if (! $session) {
print "connection failure : $xenhost\n";
exit;
}
my ($host_ref,$domU_ref,$hostname) = ();
$host_ref = extractvalue($xen->simple_request("session.get_this_host",
$session,$session));
# Get the reference for all the VMs on the xen dom0 host.
# $domU_ref = extractvalue($xen->simple_request("host.get_resident_VMs",
# $session, $host_ref));
$domU_ref = extractvalue($xen->simple_request("host.get_all",$session);
my ($vmtype,@domUarr) = ();
print "dom0 host - $xenhost\n";
foreach (@$domU_ref) {
my $vm_ref = $_;
# General VM info
my $is_template = extractvalue($xen->simple_request("VM.get_is_a_template", $session, $vm_ref));
if ( $is_template eq 1 ) { next; };
my $vmrecord = extractvalue($xen->simple_request("VM.get_record",$session,$vm_ref));
if ( $vmrecord->{domid} eq 0 ) { next; };
my $vmname = $vmrecord->{name_label};
my $vmstate = $vmrecord->{power_state};
$vmstate = $state->{$vmstate};
if ( $vmstate eq "Running" ) {
$xen->simple_request("VM.hard_shutdown", $session, $vm_ref); # Synchronous
#$xen->simple_request("Async.VM.clean_shutdown", $vm_ref); # Asynchronous
print "Shutting down $vmname..\n";
} else {
print "$vmstate\n";
$xen->simple_request("VM.start", $session, $vm_ref, 0, 1); # Synchronous
#$xen->simple_request("Async.VM.start", $vm_ref, 0); # Asynchronous
print "Starting $vmname..\n";
}
}
$xen->simple_request("session.logout", $session);
sub extractvalue {
my ($val) = @_;
if ($val->{'Status'} eq "Success") {
return $val->{'Value'};
} else {
return undef;
}
}