libvirtのPerlバインディング "Sys::Virt"

libvirtPerlから使用するモジュール Sys::Virtを使ってみました。

Sys::Virtのインストール

バージョンが古いですが、CentOS 5.5に収録されているパッケージを使用しました。*1

$ sudo yum install perl-Sys-Virt

起動中の仮想ドメイン情報の取得

以下のようなスクリプトで、仮想ドメインの情報が取得できます。

#!/usr/bin/perl

use warnings;
use strict;
use Sys::Virt;

my $addr = 'qemu:///system';

my $vmm = Sys::Virt->new(address => $addr);

my @domains = $vmm->list_domains();
foreach my $dom (@domains) {
    print "----- ", $dom->get_name, " -----\n";
    print "Domain ID : ", $dom->get_id, "\n";

    # CPU
    my @vcpuinfo = $dom->get_vcpu_info();
    foreach my $vcpu (@vcpuinfo) {
        print "VCPU : ", $vcpu->{number}, "\n";
        print "Pysical CPU : ", $vcpu->{cpu}, "\n";
        print "CPU Time : ", $vcpu->{cpuTime}, "\n";
    }

    # MEM
    my $info = $dom->get_info();
    print "Mem/MaxMem : ", $info->{memory}, "/", $info->{maxMem}, "\n";

    # UUID
    my $uuid = $dom->get_uuid_string();
    print "UUID : ", $uuid, "\n";
}

print "----- Network Info -----\n";
my @nets = $vmm->list_networks();
foreach my $net (@nets) {
    print "Net Name ", $net->get_name, "\n";
    print "Bridge Net ", $net->get_bridge_name, "\n";
}

__END__

実行結果は、以下のようになります。

# ./getVmList.pl 
----- dev-cent01 -----
Domain ID : 1
VCPU : 0
Pysical CPU : 0
CPU Time : 459120000000
Mem/MaxMem : 1048576/1048576
UUID : dd8ae813-5ae2-9248-d22a-8073af072aab
----- dev-cent02 -----
Domain ID : 2
VCPU : 0
Pysical CPU : 3
CPU Time : 389970000000
Mem/MaxMem : 1048576/1048576
UUID : 1880e53f-5ba2-aa9d-8f13-a80ca7a9473e
----- Network Info -----
Net Name default
Bridge Net virbr0


情報取得以外にも、ドメイン操作(停止/再起動/メモリ容量設定 etc)、ネットワーク操作、ストレージ操作も可能です。


libvirt: The virtualization API
Sys-Virt-v5.1.0 - libvirt Perl API - metacpan.org

*1:最新版を使用する場合は、cpanコマンドなどでインストールしてください