Xen host can be monitored and controlled via Xen API ( it uses XML-RPC communications). Here is a sample how to program using XenAPI. For XenAPI to work, you should have the below enty in /etc/xen/xend-config.sxp. You can also control which hosts can connect through API. 

/etc/xen/xend-config.sxp–
(xen-api-server ((9363 none)
                 (unix none)))


Here is a sample perl script which can query and get details from Xen host using Xen API.

x——————————————–x
#!/usr/bin/perl

# Xen API Programming.
# unixfoo – http://unixfoo.blogspot.com/

use Net::Ping;
use RPC::XML;
use RPC::XML::Client;

my $xenhost = $ARGV[0];
my $user = $ARGV[1];
my $passwd = $ARGV[2];

my $xenport = 9363;

my $state = {
            “Running” => “ON”,
            “Halted” => “OFF”,
            “Suspended” => “SUSPENDED”,
            “Paused” => “SUSPENDED”,
            “Unknown” => “UNKNOWN”
            };
           

my %hash=();

# Check ping status
my $ping = Net::Ping->new();
if ( $ping->ping($xenhost,2) ne ‘1’ )
{
    print “$xenhost is downn”;
    exit;
}
else
{
    # 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 : $xenhostn”;
        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));
   
    my ($vmtype,@domUarr) = ();
   
    print “dom0 host – $xenhostn”;
    foreach (@$domU_ref)
    {
        my $vm_ref = $_;
       
        # General VM info
        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};
       
        my $xenmemmax = $vmrecord->{memory_dynamic_max};
        my $xenmemmin = $vmrecord->{memory_dynamic_min};
       
        $xenmemmax = $xenmemmax/1024/1024;
        $xenmemmin = $xenmemmin/1024/1024;
       
        if ( $vmrecord->{HVM_boot_policy} eq ” )
        {
           $vmtype = ‘Para-Virt’;  
        }
        else
        {
            $vmtype = ‘Full-Virt’;
        }
        print “$vmname – $vmstate – $xenmemmax – $xenmemmin – $vmtypen”;       
    }     
}
sub extractvalue
{
    my ($val) = @_;
    if ($val->{‘Status’} eq “Success”)
    {
        return $val->{‘Value’};
    }
    else
    {
        return undef;
    }
}
x——————————————–x

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like