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

use Data::Dumper;
use Getopt::Long;
use VMware::API::LabManager;
use strict;

my ( $username, $password, $server);
my $orgname   = 'Global';
my $workspace = 'Main';

my $ret = GetOptions ( 'username=s' => \$username, 'password=s' => \$password,
                       'orgname=s' => \$orgname, 'workspace=s' => \$workspace,
                       'server=s' => \$server );

die "Check the POD. This script needs command line parameters." unless
 $username and $password and $orgname and $workspace and $server;

my $labman = new VMware::API::LabManager (
  $username, $password, $server, $orgname, $workspace                        
);

my $orgs = $labman->priv_GetOrganizations();

for my $org (@$orgs) {
  my $org_id = $org->{Id};
  my $org_name = $org->{Name};
  print "ORG: $org_name ($org_id)\n";

  my $wss = $labman->priv_GetOrganizationWorkspaces($org_id);
  $wss = [ $wss ] if ref $wss eq 'HASH'; # Single workspace condition

  for my $ws (@$wss) {
    my $ws_id = $ws->{Id};
    my $ws_name = $ws->{Name};
    print "  WS: $ws_name ($ws_id)\n";

    if ( $ws->{Configurations} and $ws->{Configurations}->{Configuration} ) {
      my $confs = $ws->{Configurations}->{Configuration};
      $confs = [ $confs ] if ref $confs eq 'HASH'; # Single configuration condition
      for my $conf (@$confs) {
        my $conf_id = $conf->{id};
        my $conf_name = $conf->{name};
        print "    CONF: $conf_name ($conf_id)\n";
      }
    }
  }
  print "\n";
}