#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html

BEGIN { $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr'; }
use lib "$::XCATROOT/lib/perl";
use Cwd;

#use IO::Socket::SSL;
#use IO::Socket::INET;
my %rvidhash;
my $xcatroot = $ENV{'XCATROOT'};
unless ($xcatroot) {
    $xcatroot = "/opt/xcat"
}
use File::Basename;
use xCAT::Client;

#use Data::Dumper;
sub process_response {
    my $resp = shift;
    foreach my $rst (\@{ $resp->{node} }) {
        foreach my $rsp (@$rst) {
            if ($rsp->{errorcode} and (not ref $rsp->{errorcode} or $rsp->{errorcode}->[0])) {
                print $rsp->{name}->[0] . ": Error: " . $rsp->{error}->[0] . "\n";
            } else {
                $rvidhash{ $rsp->{name}->[0] }->{ $rsp->{data}->[0]->{desc}->[0] } = $rsp->{data}->[0]->{contents}->[0];
            }
        }
    }
}

my $cmdref;
$cmdref->{command}->[0] = 'getrvidparms';

# Consider the 1st non-hyphen arg to be the noderange.  All others (before and after) go on the arg list.
my $arg = shift(@ARGV);
while ($arg =~ /^-/) {
    push(@{ $cmdref->{arg} }, $arg);
    $arg = shift(@ARGV);
}
if ($arg ne "NO_NODE_RANGE") {
    $cmdref->{noderange}->[0] = $arg;
}
push(@{ $cmdref->{arg} }, @ARGV);

xCAT::Client::submit_request($cmdref, \&process_response);
my %CLEANENV = %ENV;
foreach my $node (keys %rvidhash) {
    %ENV = %CLEANENV;
    foreach my $var (keys %{ $rvidhash{$node} }) {
        $ENV{"rvid_$var"} = $rvidhash{$node}->{$var};
    }
    system("$xcatroot/share/xcat/rvid/rvid." . $ENV{"rvid_method"} . " &");
}
exit $xCAT::Client::EXITCODE;
