add system P nodes by rscan on the web gui

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10483 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
xq2005 2011-09-09 06:03:09 +00:00
parent 28c39af34d
commit 110ba54f01
3 changed files with 324 additions and 11 deletions

View File

@ -162,6 +162,258 @@ hmcPlugin.prototype.loadResources = function() {
* @return Nothing
*/
hmcPlugin.prototype.addNode = function() {
openDialog('info', 'Under construction');
var diaDiv = $('<div id="addpnodeDiv" class="form"></div>');
diaDiv.append('<div><label>Type:</label><select id="pnodetype"><option>HMC</option><option>Scan Node</option></select></div>');
diaDiv.append('<div id="pnodeeditarea" ></div>');
//show the dialog
diaDiv.dialog( {
modal : true,
width : 400,
title : 'Add System P Node',
close : function(){$('#addpnodeDiv').remove();}
});
//bind the select change event
$('#pnodetype').bind('change', function(){
$('#pnodeeditarea').empty();
if ('HMC' == $(this).val()){
$('#addpnodeDiv').dialog('option', 'width', '400');
$('#pnodeeditarea').append('<label>Name:</label><input><br/><label>Username:</label><input><br/>' +
'<label>Password:</label><input><br/><label>IP Adress:</label><input>');
$('#addpnodeDiv').dialog('option', 'buttons',
{'Add': function(){addHmcNode();},
'Cancle': function(){$('#addpnodeDiv').dialog('close');}});
}
else{
//add loader image and delete buttons
$('#pnodeeditarea').append(createLoader());
$('#addpnodeDiv').dialog('option', 'buttons', {'Cancel': function(){$('#addpnodeDiv').dialog('close');}});
$('#addpnodeDiv').dialog('option', 'width', '650');
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'nodels',
tgt : 'all',
args : 'ppc.nodetype==hmc',
msg : ''
},
success : function(data){
$('#pnodeeditarea img').remove();
drawHmcSelector(data.rsp);
}
});
}
});
//trigger the selector change event
$('#pnodetype').trigger('change');
};
/**
* add all hmcs into the dialog
*
* @return Nothing
*/
function drawHmcSelector(hmcs){
if (1 > hmcs.length){
$('#pnodeeditarea').append(createWarnBar('Please define HMC node first.'));
return;
}
//add all hmcs into a selecter, add a scan button
var hmcoption = '';
var scanbutton = createButton('Scan');
for (var i in hmcs){
hmcoption += '<option>' + hmcs[i][0] + '</option>';
}
$('#pnodeeditarea').append('<label>HMC:</label><select>' + hmcoption + '</select>');
$('#pnodeeditarea').append(scanbutton);
scanbutton.bind('click', function(){
var hmcname = $('#pnodeeditarea select').val();
$('#pnodeeditarea').append(createLoader());
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'rscan',
tgt : hmcname,
args : '',
msg : ''
},
success : function(data){
$('#pnodeeditarea img').remove();
//draw a table with checkbox
drawRscanResult(data.rsp[0]);
//add the add button
$('#addpnodeDiv').dialog('option', 'buttons',
{'Add': function(){addPNode();},
'Cancle': function(){$('#addpnodeDiv').dialog('close');}});
}
});
});
}
function drawRscanResult(rscanresult){
var line = '';
var tempreg = /\S+/g;
var idpreg = /^\d+$/;
var resultDiv = $('<div class="tab" style="height:300px;overflow:auto;"></div>');
var rscantable = $('<table></table>');
var temprow = '';
var colnum = 0;
var fields = 0;
$('#pnodeeditarea div').remove();
if (!rscanresult){
return;
}
var rows = rscanresult.split("\n");
if (rows.length < 2){
return;
}
//add the table header
fields = rows[0].match(tempreg);
colnum = fields.length;
temprow = '<tr><td><input type="checkbox" onclick="selectAllRscanNode(this)"></td>';
for(var i in fields){
temprow += '<td>' + fields[i] + '</td>';
}
rscantable.append(temprow);
//add the tbody
for (var i = 1; i < rows.length; i++){
line = rows[i];
if (!line){
continue;
}
var fields = line.match(tempreg);
if ('hmc' == fields[0]){
continue;
}
//may be the 3rd field(id) is empty, so we should add the new
if (!idpreg.test(fields[2])){
fields = [fields[0], fields[1], ''].concat(fields.slice(2));
}
temprow = '<tr><td><input type="checkbox" name="' + fields[1] + '"></td>';
for(var j = 0; j < colnum; j++){
temprow += '<td>';
if (fields[j]){
temprow += fields[j];
}
temprow += '</td>';
}
temprow += '</tr>';
rscantable.append(temprow);
}
resultDiv.append(rscantable);
$('#pnodeeditarea').append(resultDiv);
}
/**
* Add hmc node
*
* @return Nothing
*/
function addHmcNode(){
var errorinfo = '';
var args = '';
$('#pnodeeditarea input').each(function(){
if (!$(this).val()){
errorinfo = 'You are missing input.';
}
args += $(this).val() + ',';
});
if (errorinfo){
//add warning message
alert(errorinfo);
return;
}
//disabled the button
$('.ui-dialog-buttonpane button').attr('disabled', 'disabled');
args = args.substr(0, args.length - 1);
$('#pnodeeditarea').append(createLoader());
//send the save hmc request
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'webrun',
tgt : '',
args : 'addpnode;hmc;' + args,
msg : ''
},
success : function(data){
//refresh the area on the right side
$('#addpnodeDiv').dialog('close');
$('.selectgroup').trigger('click');
}
});
}
/**
* Add system p node, contains frame, cec, lpar
*
* @return Nothing
*/
function addPNode(){
//get the hmc name
var hmcname = $('#pnodeeditarea select').val();
var nodename = '';
//get all need added node
$('#pnodeeditarea :checked').each(function(){
if ($(this).attr('name')){
nodename += $(this).attr('name') + ',';
}
});
if (!nodename){
alert('You should select nodes first!');
return;
}
//disabled the button
$('.ui-dialog-buttonpane button').attr('disabled', 'disabled');
nodename = nodename.substr(0, nodename.length - 1);
$('#pnodeeditarea').append(createLoader());
//send the add request
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'webrun',
tgt : '',
args : 'addpnode;node;' + hmcname + ',' + nodename,
msg : ''
},
success : function(data){
//refresh the area on the right side
$('#addpnodeDiv').dialog('close');
$('.selectgroup').trigger('click');
}
});
}
/**
* select all checkbox in a table
*
* @return Nothing
*/
function selectAllRscanNode(obj){
var status = $(obj).attr('checked');
$(obj).parents('table').find(':checkbox').attr('checked', status);
}

View File

@ -211,17 +211,16 @@ function loadSummaryDetail(ev, seriesIndex, pointIndex, data){
var table = '';
switch (temp) {
case 'os':
break;
case 'arch':
break;
case 'provmethod':
break;
case 'nodetype':
case 'nodetype':{
table = 'nodetype';
break;
case 'status':
}
break;
case 'status': {
table = 'nodelist';
break;
}
break;
}
var args = table + '.' + temp + '==';
@ -395,8 +394,8 @@ function mkAddNodeLink() {
+ '<select id="mgt" name="mgt">'
+ '<option value="ipmi">iDataPlex</option>'
+ '<option value="blade">BladeCenter</option>'
+ '<option value="hmc">System p</option>'
+ '<option value="zvm">System z</option>'
+ '<option value="hmc">System P</option>'
+ '<option value="zvm">System Z</option>'
+ '</select>'
+ '</div>');

View File

@ -55,7 +55,8 @@ sub process_request {
'summary' => \&web_summary,
'gangliashow' => \&web_gangliaShow,
'gangliacurrent' => \&web_gangliaLatest,
'rinstall' => \&web_rinstall
'rinstall' => \&web_rinstall,
'addpnode' => \&web_addpnode
);
#check whether the request is authorized or not
@ -1889,4 +1890,65 @@ sub web_rinstall {
$callback->( { data => $out } );
}
sub web_addpnode{
my ( $request, $callback, $sub_req ) = @_;
my $nodetype = $request->{arg}->[1];
my @tempArray = split(',', $request->{arg}->[2]);
my $hmcname = shift(@tempArray);
if ('hmc' eq $nodetype){
my $username = $tempArray[0];
my $passwd = $tempArray[1];
my $ip = $tempArray[2];
`/bin/grep '$hmcname' /etc/hosts`;
if ($?){
open(OUTPUTFILE, '>>/etc/hosts');
print OUTPUTFILE "$ip $hmcname\n";
close(OUTPUTFILE);
}
`chdef -t node -o $hmcname username=$username password=$passwd mgt=hmc nodetype=hmc groups=all`;
return;
}
my %temphash;
my $writeflag = 0;
my $line = '';
#save all node into a hash
foreach(@tempArray) {
$temphash{$_} = 1;
}
`rscan $hmcname -z > /tmp/rscanall.tmp`;
#if can not create the rscan result file, error
unless(-e '/tmp/rscanall.tmp'){
return;
}
open(INPUTFILE, '/tmp/rscanall.tmp');
open(OUTPUTFILE, '>/tmp/webrscan.tmp');
while($line=<INPUTFILE>){
if ($line =~ /(\S+):$/){
if ($temphash{$1}){
$writeflag = 1;
print OUTPUTFILE $line;
}
else{
$writeflag = 0;
}
}
else{
if ($writeflag){
print OUTPUTFILE $line;
}
}
}
close(INPUTFILE);
close(OUTPUTFILE);
unlink('/tmp/rscanall.tmp');
`cat /tmp/webrscan.tmp | chdef -z`;
unlink('/tmp/webrscan.tmp');
}
1;