-Add rvid for AMM (BPET46C tested)

-Have nodech implement explicit blank override of group level attributes


git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2532 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jbjohnso 2008-12-09 15:23:12 +00:00
parent d20f5778a1
commit 05b4df7c71
4 changed files with 135 additions and 0 deletions

52
xCAT-client/bin/wvid Executable file
View File

@ -0,0 +1,52 @@
#!/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 Data::Dumper;
use xCAT::Client;
use Data::Dumper;
sub process_response {
my $resp = shift;
foreach my $rst (\@{$resp->{node}}) {
foreach my $rsp (@$rst) {
print Dumper($rsp);
$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);
print Dumper(\%rvidhash);
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;

View File

@ -0,0 +1,8 @@
#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
if [ ! -f /tmp/xcat/$rvid_server.remotekvm.jar ]; then
wget -O /tmp/xcat/$rvid_server.remotekvm.jar http://$rvid_server/private/remotekvm.jar
fi
java -jar /tmp/remotekvm.jar -s $rvid_server -r $rvid_authtoken -b $rvid_slot >& /dev/null
rm /tmp/xcat/rvid_server.remotekvm.jar

View File

@ -16,10 +16,13 @@ use SNMP;
use xCAT::GlobalDef;
use xCAT_monitoring::monitorctrl;
use strict;
use LWP;
#use warnings;
my %mm_comm_pids;
#a 'browser' for http actions
my $browser;
use XML::Simple;
if ($^O =~ /^linux/i) {
$XML::Simple::PREFERRED_PARSER='XML::Parser';
@ -41,6 +44,7 @@ sub handled_commands {
rscan => 'nodehm:mgt',
rpower => 'nodehm:power,mgt',
getbladecons => 'blade',
getrvidparms => 'nodehm:mgt',
rvitals => 'nodehm:mgt',
rinv => 'nodehm:mgt',
rbeacon => 'nodehm:mgt',
@ -1761,6 +1765,39 @@ sub build_depend {
return( [\%dp,\%mpa_hash] );
}
sub httplogin {
#TODO: Checked for failed login here.
my $mpa = shift;
my $user = shift;
my $pass = shift;
my $url="http://$mpa/shared/userlogin.php";
$browser = LWP::UserAgent->new;
$browser->cookie_jar({});
my $response = $browser->post($url,{userid=>$user,password=>$pass,login=>"Log In"});
$response = $browser->post("http://$mpa/shared/welcome.php",{timeout=>1,save=>""});
$response = $browser->post("http://$mpa/shared/welcomeright.php",{timeout=>1,save=>""});
}
sub get_kvm_params {
my $mpa = shift;
my $response = $browser->get("http://$mpa/private/vnc_only.php");
my $html = $response->{_content};
my $destip;
my $rbs;
foreach (split /\n/,$html) {
if (/<param\s+name\s*=\s*"([^"]*)"\s+value\s*=\s*"([^"]*)"/) {
if ($1 eq 'ip') {
$destip=$2;
} elsif ($1 eq 'rbs') {
$rbs = $2;
}
}
}
return ($destip,$rbs);
}
sub getbladecons {
my $noderange = shift;
@ -2594,6 +2631,41 @@ sub dompa {
my $node;
my $args = \@exargs;
#Handle http commands on their own
if ($command eq "getrvidparms") {
my $user = $mpahash->{$mpa}->{username};
my $pass = $mpahash->{$mpa}->{password};
httplogin($mpa,$user,$pass);
(my $target, my $authtoken) = get_kvm_params($mpa);
#an http logoff would invalidate the KVM token, so we can't do it here
#For the instant in time, banking on the http session timeout to cleanup for us
#It may be possible to provide the session id to client so it can logoff when done, but
#that would give full AMM access to the KVM client
foreach $node (sort (keys %{$mpahash->{$mpa}->{nodes}})) {
my $slot = $mpahash->{$mpa}->{nodes}->{$node};
my @output = ();
push(@output,"method:blade");
push(@output,"server:$target");
push(@output,"authtoken:$authtoken");
push(@output,"slot:$slot");
my %outh;
$outh{node}->[0]->{name}=[$node];
$outh{node}->[0]->{data}=[];
foreach (@output) {
(my $tag, my $text)=split /:/,$_,2;
push (@{$outh{node}->[0]->{data}},{desc=>[$tag],contents=>[$text]});
print $out freeze([\%outh]);
print $out "\nENDOFFREEZE6sK4ci\n";
yield;
waitforack($out);
%outh=();
$outh{node}->[0]->{name}=[$node];
$outh{node}->[0]->{data}=[];
}
}
return;
}
# Handle telnet commands before SNMP
if ($command eq "rspconfig") {
foreach $node (sort (keys %{$mpahash->{$mpa}->{nodes}})) {

View File

@ -642,6 +642,9 @@ sub nodech
#So before, table.column==value meant set to =value, now it would be matching value
#the new way would be table.column=@=value to be unambiguous
#now a value like '@hi' would be set with table.column=@@hi
if ($value eq '') { #If blank, force a null entry to override group settings
$value = '|^.*$||';
}
my $op = '=';
if ($temp =~ /,$/)
{