Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Apr 20th, 2011  |  syntax: Perl  |  size: 2.32 KB  |  views: 99  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/perl
  2.  
  3.  
  4. use Net::Ping;
  5. use RPC::XML;
  6. use RPC::XML::Client;
  7.  
  8. my $xenhost = $ARGV[0];
  9. my $user = $ARGV[1];
  10. my $passwd = $ARGV[2];
  11.  
  12. my $xenport = 80;
  13.  
  14. my $state = {
  15.             "Running" => "ON",
  16.             "Halted" => "OFF",
  17.             "Suspended" => "SUSPENDED",
  18.             "Paused" => "SUSPENDED",
  19.             "Unknown" => "UNKNOWN"
  20.             };
  21.            
  22.  
  23. my %hash=();
  24.  
  25.   # Establish the XEN API connection
  26.   my $xen = RPC::XML::Client->new("http://$xenhost:$xenport");
  27.   my $session = extractvalue($xen->simple_request("session.login_with_password",
  28.                 $user,$passwd));
  29.  
  30.   if (! $session) {
  31.       print "connection failure : $xenhost\n";
  32.       exit;
  33.   }
  34.  
  35.   my ($host_ref,$domU_ref,$hostname) = ();
  36.  
  37.   $host_ref = extractvalue($xen->simple_request("session.get_this_host",
  38.               $session,$session));
  39.    
  40.   # Get the reference for all the VMs on the xen dom0 host.
  41. #  $domU_ref = extractvalue($xen->simple_request("host.get_resident_VMs",
  42. #              $session, $host_ref));
  43.   $domU_ref = extractvalue($xen->simple_request("host.get_all",$session);
  44.  
  45.   my ($vmtype,@domUarr) = ();
  46.  
  47.   print "dom0 host - $xenhost\n";
  48. foreach (@$domU_ref) {
  49.   my $vm_ref = $_;
  50.    
  51.   # General VM info
  52.   my $is_template = extractvalue($xen->simple_request("VM.get_is_a_template", $session, $vm_ref));
  53.   if ( $is_template eq 1 ) { next; };
  54.   my $vmrecord = extractvalue($xen->simple_request("VM.get_record",$session,$vm_ref));
  55.   if ( $vmrecord->{domid} eq 0 ) { next; };        
  56.  
  57.   my $vmname = $vmrecord->{name_label};
  58.   my $vmstate = $vmrecord->{power_state};
  59.   $vmstate = $state->{$vmstate};
  60.  
  61.   if ( $vmstate eq "Running" ) {
  62.     $xen->simple_request("VM.hard_shutdown", $session, $vm_ref); # Synchronous
  63.     #$xen->simple_request("Async.VM.clean_shutdown", $vm_ref); # Asynchronous
  64.     print "Shutting down $vmname..\n";
  65.   } else {
  66.     print "$vmstate\n";
  67.     $xen->simple_request("VM.start", $session, $vm_ref, 0, 1); # Synchronous
  68.     #$xen->simple_request("Async.VM.start", $vm_ref, 0); # Asynchronous
  69.     print "Starting $vmname..\n";
  70.   }
  71. }
  72.  
  73. $xen->simple_request("session.logout", $session);
  74.  
  75.  
  76. sub extractvalue {
  77.     my ($val) = @_;
  78.    
  79.     if ($val->{'Status'} eq "Success") {
  80.         return $val->{'Value'};
  81.     } else {
  82.         return undef;
  83.     }
  84. }
clone this paste RAW Paste Data