The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

########################################################
#
#    List all openvz virtual machines on the cluster
#
########################################################

use strict;
use warnings;

use lib './lib';
use Net::Proxmox::VE;
use Data::Dumper;
use Getopt::Long;

my $host     = 'host';
my $username = 'user';
my $password = 'pass';
my $debug    =  undef;
my $realm    = 'pve'; # 'pve' or 'pam'

GetOptions (
    'host=s'     => \$host,
    'username=s' => \$username,
    'password=s' => \$password,
    'debug'      => \$debug,
    'realm'      => \$realm,
);

my $pve = Net::Proxmox::VE->new(
    host     => $host,
    username => $username,
    password => $password,
    debug    => $debug,
    realm    => $realm,
);

die "login failed\n"          unless $pve->login;
die "invalid login ticket\n"  unless $pve->check_login_ticket;
die "unsupport api version\n" unless $pve->api_version_check;

# list openvz virtual machines by requesting
my $resources = $pve->get("/cluster/resources");

foreach my $item( @$resources ) {
    next unless $item->{type} eq 'openvz';

    print "id: " .        $item->{id} . "\n"; 
    print "cpu: " .       $item->{cpu} . "\n";
    print "disk: " .      $item->{disk} . "\n";
    print "maxcpu: " .    $item->{maxcpu} . "\n";
    print "maxdisk: " .   $item->{maxdisk} . "\n";
    print "maxmem: " .    $item->{maxmem} . "\n";
    print "mem: " .       $item->{mem} . "\n";
    print "node: " .      $item->{node} . "\n";
    print "type: " .      $item->{type} . "\n";
    print "uptime: " .    $item->{uptime} . "\n";
    print "diskread: " .  $item->{diskread} . "\n";
    print "diskwrite: " . $item->{diskwrite} . "\n";
    print "name: " .      $item->{name} . "\n";
    print "netin: " .     $item->{netin} . "\n";
    print "netout: " .    $item->{netout} . "\n";
    print "status: " .    $item->{status} . "\n";
    print "template: " .  $item->{template} . "\n";
    print "vmid: " .      $item->{vmid} . "\n";
    print "\n";
}