xcat-core/xCAT-UI/js/configure/update.js
2011-04-14 18:38:26 +00:00

314 lines
8.1 KiB
JavaScript

/**
* Load update page
*
* @return Nothing
*/
function loadUpdatePage() {
var repositoryDiv = $('<div id="repository"></div>');
var rpmDiv = $('<div id="rpm"></div>');
var statusDiv = createStatusBar("update");
statusDiv.hide();
$('#updateTab').append(statusDiv);
$('#updateTab').append('<br>');
$('#updateTab').append(repositoryDiv);
$('#updateTab').append(rpmDiv);
var infoBar = createInfoBar('Select the repository to use and the RPMs to update, then click Update.');
repositoryDiv.append(infoBar);
repositoryDiv.append("<fieldset><legend>Repository</legend></fieldset>");
$.ajax( {
url : 'lib/systemcmd.php',
dataType : 'json',
data : {
cmd : 'ostype'
},
success : showRepository
});
rpmDiv.append("<fieldset></fieldset>");
$.ajax( {
url : 'lib/systemcmd.php',
dataType : 'json',
data : {
cmd : 'rpm -q xCAT-client perl-xCAT xCAT-server xCAT xCAT-rmc xCAT-UI'
},
success : showRpmInfo
});
}
/**
* Show the RPM Repository, it can use user's last choice and input
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function showRepository(data) {
var develRepository = "";
var stableRepository = "";
var show = "";
// get the corresponding repository by OS Type
if ("aix" == data.rsp) {
develRepository = "http://xcat.sourceforge.net/aix/devel/xcat-core/";
stableRepository = "http://xcat.sourceforge.net/aix/xcat-core/";
} else {
develRepository = "http://xcat.sourceforge.net/yum/devel/xcat-core/";
stableRepository = "http://xcat.sourceforge.net/yum/xcat-core/";
}
var repoList = $('<ol></ol>');
// display the Devel Repository, remember user's last selection
show = show + "<li><input type='radio' ";
if (1 == $.cookie('xcatrepository')) {
show = show + "checked='true'";
}
show = show + "name='reporadio' value='" + develRepository + "'>";
show = show + develRepository + "(<strong>Devel</strong>)</li>";
repoList.append(show);
// display the Stable Repository, remember user's last selection
show = "<li><input type='radio' ";
if (2 == $.cookie('xcatrepository')) {
show = show + "checked='true'";
}
show = show + "name='reporadio' value='" + stableRepository + "'>";
show = show + stableRepository + "(<strong>Stable</strong>)</li>";
repoList.append(show);
// display the Input Repository, remember user's last selection
if (($.cookie('xcatrepository')) && (1 != $.cookie('xcatrepository')) && (2 != $.cookie('xcatrepository'))) {
show = "<li><input type='radio' checked='true' name='reporadio' value=''>Other: ";
show += "<input style='width: 500px' id='repositoryaddr' value='" + $.cookie('xcatrepository') + "'</li>";
} else {
show = "<li><input type='radio' name='reporadio' value=''>Other: ";
show += "<input style='width: 500px' id='repositoryaddr' value=''</li>";
}
repoList.append(show);
$('#repository fieldset').append(repoList);
}
/**
* Show all xCAT RPMs
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function showRpmInfo(data) {
var rpms = null;
var show = "";
var rpmNames = new Array("xCAT-client", "perl-xCAT", "xCAT-server", "xCAT", "xCAT-rmc", "xCAT-UI");
var temp = 0;
if (null == data.rsp) {
$('#rpm fieldset').append("Error getting RPMs!");
return;
}
rpms = data.rsp.split(/\n/);
// no rpm installed, return
if (1 > rpms.length) {
$('#rpm fieldset').append("No RPMs installed!");
return;
}
// clear the old data
$('#rpm fieldset').children().remove();
$('#rpm fieldset').append("<legend>xCAT RPMs</legend>");
show = "<table id=rpmtable >";
show += "<thead><tr>";
show += "<th><input type='checkbox' id='selectall' value='' onclick='updateSelectAll()'></th>";
show += "<th><b>Package Name</b></th><th><b>Version</b></th>";
show += "</tr></thead>";
for (temp = 0; temp < rpms.length; temp++) {
// empty line continue
if ("" == rpms[temp]) {
continue;
}
// the rpm is not installed, continue
if (-1 != rpms[temp].indexOf("not")) {
continue;
}
// show the version in table
show += "<tr>";
show += "<td><input type='checkbox' value='" + rpmNames[temp] + "'></td>";
show += "<td>" + rpmNames[temp] + "</td><td>" + rpms[temp].substr(rpmNames[temp].length + 1) + "</td>";
show += "</tr>";
}
show += "</table>";
show += "<br\>";
$('#rpm fieldset').append(show);
// add the update button
var updateButton = createButton('Update');
$('#rpm fieldset').append(updateButton);
updateButton.bind('click', function() {
updateRpm();
});
}
/**
* Select all checkboxes
*
* @return Nothing
*/
function updateSelectAll() {
var check_status = $('#selectall').attr('checked');
$('input:checkbox').attr('checked', check_status);
}
/**
* Update selected xCAT RPMs
*
* @return Nothing
*/
function updateRpm() {
// Remove any warning messages
$('#updateTab').find('.ui-state-error').remove();
var rpmPath = $('input[type=radio]:checked').val();
var rpmPathType = "0";
var rpms = "";
var temp = "";
if (undefined == rpmPath) {
rpmPath = "";
}
// select other and we should use the value in the input
if ("" == rpmPath) {
// user input the repo, and we must stroe it in the cookie
rpmPath = $('#repositoryaddr').val();
rpmPathType = rpmPath;
} else {
if (-1 == rpmPath.toLowerCase().indexOf("devel")) {
rpmPathType = "2";
} else {
rpmPathType = "1";
}
}
$("input[type=checkbox]:checked").each(function() {
temp = $(this).val();
if ("" == temp) {
return true;
}
var pattern = new RegExp("^" + temp + ",|," + temp + ",");
if (pattern.test(rpms)) {
return true;
}
rpms = rpms + temp + ",";
});
if (0 < rpms.length) {
rpms = rpms.slice(0, -1);
}
// Check RPM and repository
var errMsg = '';
if (!rpms) {
errMsg = "Please select an RPM!<br>";
}
if (!rpmPath) {
errMsg += "Please select or input a repository!";
}
if (!rpms || !rpmPath) {
// Show warning message
var warn = createWarnBar(errMsg);
warn.prependTo($('#updateTab'));
return;
}
// remember users' choice and input
$.cookie('xcatrepository', rpmPathType, {
path : '/xcat',
expires : 10
});
$('#update').show();
$('#update').empty();
$('#update').append("<p>Updating <b>" + rpms + "</b> from <b>" + rpmPath + "</b></p>");
$('#update').append("<img id='loadingpic' src='images/loader.gif'>");
$('#rpm button').attr('disabled', 'true');
// send the update command to server
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'webrun',
tgt : '',
args : 'update;' + rpms + ";" + rpmPath,
msg : ''
},
success : ShowUpdateResult
});
}
/**
* Show the results of the RPM update
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function ShowUpdateResult(data) {
var temp = 0;
$('#loadingpic').remove();
var resArray = data.rsp[0].split(/\n/);
if (0 < resArray.length) {
// Show last lines
if (('' == resArray[resArray.length - 1]) && (resArray.length > 1)) {
$('#update').append(resArray[resArray.length - 2]);
} else {
$('#update').append(resArray[resArray.length - 1]);
}
// Create link to show details
$('#update').append('<br/><a>Show details</a>');
$('#update a').css({
'color': '#0000FF',
'cursor': 'pointer'
}).bind('click', function() {
// Toggle details and change text
$('#resDetail').toggle();
if ($('#update a').text() == 'Show details') {
$('#update a').text('Hide details');
} else {
$('#update a').text('Show details');
}
});
var resDetail = $('<div id="resDetail"></div>');
resDetail.hide();
$('#update').append(resDetail);
for (temp = 0; temp < resArray.length; temp++) {
resDetail.append(resArray[temp] + "<br>");
}
}
// update the rpm info
$.ajax( {
url : 'lib/systemcmd.php',
dataType : 'json',
data : {
cmd : 'rpm -q xCAT-client perl-xCAT xCAT-server xCAT xCAT-rmc xCAT-UI'
},
success : showRpmInfo
});
$('#rpm button').attr('disabled', '');
}