Added the skeleton of the system p hw discovery wizard.

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2354 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
bp-sawyers 2008-10-17 01:45:03 +00:00
parent b194844f34
commit a347829161
10 changed files with 326 additions and 69 deletions

View File

@ -76,10 +76,9 @@ $MENU = array(
'default' => 'groups',
'list' => array(
'lab' => array('label' => 'Lab Floor', 'url' => "$TOPDIR/machines/lab.php"),
'frames' => array('label' => 'Frames', 'url' => "$TOPDIR/machines/frames.php"),
'groups' => array('label' => 'Groups', 'url' => "$TOPDIR/machines/groups.php"),
'nodes' => array('label' => 'Nodes', 'url' => "$TOPDIR/machines/nodes.php"),
'layout' => array('label' => 'Layout', 'url' => "$TOPDIR/machines/layout.php"),
'frames' => array('label' => 'Racks', 'url' => "$TOPDIR/machines/frames.php"),
'groups' => array('label' => 'Groups/Nodes', 'url' => "$TOPDIR/machines/groups.php"),
'discover' => array('label' => 'Discover', 'url' => "$TOPDIR/machines/discover.php"),
)
),
'manage' => array(
@ -127,7 +126,7 @@ $MENU = array(
'default' => 'diagnose',
'list' => array(
'diagnose' => array('label' => 'Diagnose', 'url' => "$TOPDIR/support/diagnose.php"),
'update' => array('label' => 'Update', 'url' => "$TOPDIR/support/update.php"),
'update' => array('label' => 'Update', 'url' => "$TOPDIR/support/updategui.php"),
'howtos' => array('label' => 'HowTos', 'url' => getDocURL('howto')),
'manpages' => array('label' => 'Man Pages', 'url' => getDocURL('manpage')),
'maillist' => array('label' => 'Mail List', 'url' => getDocURL('web','mailinglist')),

View File

@ -221,7 +221,7 @@ a.button {
background: transparent url('../images/bg_button_a.gif') no-repeat scroll top right;
color: #444;
display: block;
float: left;
/* float: left; */
font: normal 12px arial, sans-serif;
height: 24px;
margin-right: 6px;

29
xCAT-web/lib/wizard.css Normal file
View File

@ -0,0 +1,29 @@
/* Styles specific to the wizards */
#outerWizardPane {
/* position: relative; so the h3 inside can be absolute to this div */
/* border: 1px solid black; */
background-color: #CCCCFF;
margin: 0px 20px 15px 20px;
padding: 5px 0px;
}
#wizardHeading { /* the inner pane where the wizard page contents goes */
/* position: absolute; move this up so it is part of the outerWizardPane border
top: -25px;
left: 50px;
background-color: white;
padding: 0px 5px; */
margin-bottom: 5px;
}
#wizardPane {
background-color: white;
padding: 10px 0px;
margin-bottom: 5px;
}
.NonCurrentSummaryItem {}
.CurrentSummaryItem { background-color: yellow; }

91
xCAT-web/lib/wizard.php Normal file
View File

@ -0,0 +1,91 @@
<?php
// Utility functions to help display a wizard. Also use wizard.css.
/* Create an array that lists the page function names and the page titles...
$pages = array('one' => 'Page One',
'two' => 'Page Two',
'three' => 'Page Three',
);
*/
function displayWizard($pages) {
$keys = array_keys($pages);
if (isset($_REQUEST['page'])) { // navigate to another page in the wizard
$page = $_REQUEST['page'];
$action = $_REQUEST['action'];
// Figure out the function for this page. Search the keys.
$k = array_search($page, $keys);
if ($k === FALSE) { msg('E',"Page $page not found in the wizard."); exit; }
if ($action == 'back') {
$k--;
if ($k < 0) { msg('E',"Can't go backward past the 1st page ($page)."); exit; }
}
elseif ($action == 'next') {
$k++;
if ($k >= count($pages)) { $k = 0; } // this was the Finish button - go back to the beginning
}
elseif ($action == 'cancel') {
$k = 0;
//todo: unset all the _SESSION variables
}
// Run the function for this page
$keys[$k]();
configureButtons($k, $pages);
}
else { // initial display of the wizard - show the 1st page
echo "<div id=outerWizardPane>\n";
echo "<p id=wizardSummary>";
$text = array();
foreach ($keys as $k => $key) { $text[] = "<span id=$key class=NonCurrentSummaryItem>$pages[$key]</span>"; }
echo implode(' -> ', $text);
echo "</p>\n";
echo "<h2 id=wizardHeading>", $pages[$keys[0]], "</h2>\n";
echo "<div id=wizardPane>\n";
// The contents of the specific page goes in here
$keys[0]();
echo "</div>\n"; // end the inner wizard pane
// Add the wizard decorations
insertButtons(
array('label' => 'Back', 'otherattrs' => 'id=backButton', 'onclick' => '$("#wizardPane").load("?page="+document.currentPage+"&action=back");'),
array('label' => 'Next', 'otherattrs' => 'id=nextButton', 'onclick' => '$("#wizardPane").load("?page="+document.currentPage+"&action=next");'),
array('label' => 'Cancel', 'onclick' => '$("#wizardPane").load("?page="'.$keys[0].'"&action=cancel");')
);
configureButtons(0, $pages);
echo "</div>\n"; // end the outer wizard pane
}
} // end of displayWizard()
//-----------------------------------------------------------------------------
// Disable buttons as appropriate and set current page
function configureButtons($k, $arr) {
$keys = array_keys($arr);
echo "<script type='text/javascript'>";
// Set the global variable so the buttons know which page this is
echo "document.currentPage='$keys[$k]';";
// Move the summary indicator
echo '$("#wizardSummary span").removeClass("CurrentSummaryItem");';
echo '$("#wizardSummary #', $keys[$k], '").addClass("CurrentSummaryItem");';
// Change the title
echo '$("#wizardHeading").text("', $arr[$keys[$k]], '");';
// Adjust the buttons appropriately for this page
if ($k <= 0) { echo '$("#backButton").hide();'; } // disable back button
else { echo '$("#backButton").show();'; }
if ($k >= (count($arr)-1)) { echo '$("#nextButton span").text("Finish");'; } // disable next button
else { echo '$("#nextButton span").text("Next");'; }
echo "</script>\n";
}
?>

View File

@ -0,0 +1,11 @@
/* Styles specific to the Discover page. */
#wizardPane H3 {
margin-top: 20px;
margin-bottom: 2px;
}
P#wizardDone {font-weight : bold; }
.wizardProgressTable { margin: 10px 0px; }

View File

@ -0,0 +1,173 @@
<?php
// Display a wizard to assist the user in discovering new nodes
$TOPDIR = '..';
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/wizard.php";
// This array controls the order of pages in the wizard
$pages = array('intro' => 'Discover Hardware',
'patterns' => 'Cluster Patterns',
'patterns2' => 'More Cluster Patterns',
'preparemn' => 'Prepare Management Node',
'prediscover' => 'Power On Hardware',
'discover' => 'Discover HW Control Points',
'updatedefs' => 'Update Definitions',
'configurehcps' => 'Configure HW Control Points',
'createnodes' => 'Create Nodes',
'testhcps' => 'Test HW Control',
'done' => 'Complete',
);
if (isset($_REQUEST['page'])) { displayWizard($pages); }
else { // initial display of the wizard, show the whole page
insertHeader('Discover New Nodes', array('discover.css',"$TOPDIR/lib/wizard.css"), array("$TOPDIR/jq/jquery.min.js"), array('machines','discover'));
echo "<div id=content align=center>\n";
displayWizard($pages);
echo "</div>\n"; // end the content div
insertFooter();
}
//-----------------------------------------------------------------------------
function intro() {
echo "<p>This wizard will guide you through the process of defining the naming conventions within your cluster, discovering the hardware on your network, and automatically defining it in the xCAT database.";
echo " Choose which type of hardware you want to discover, and then click Next.</p>\n";
echo "<table cellspacing=5>\n";
echo "<tr><td align=left><label><input type=radio name=hwType value=systemx disabled> System x hardware (not implemented yet)</label></td></tr>\n";
echo "<tr><td align=left><label><input type=radio name=hwType value=systemp checked> System p hardware</label></td></tr>\n";
echo "</table>\n";
}
//-----------------------------------------------------------------------------
function patterns() {
echo "<table cellspacing=5>\n";
echo "<tr><td colspan=2 align=center><h3>Switch Patterns</h3></td></tr>\n";
echo "<tr><td align=right><label for=switchHostname>Switch Hostname Pattern:</label></td><td align=left><input type=text name=switchHostname id=switchHostname></td></tr>\n";
echo "<tr><td align=right><label for=switchIP>Switch IP Address Pattern:</label></td><td align=left><input type=text name=switchIP id=switchIP></td></tr>\n";
echo "<tr><td colspan=2 align=center><h3>HMCs</h3></td></tr>\n";
echo "<tr><td align=right><label for=hmcHostname>HMC Hostname Pattern:</label></td><td align=left><input type=text name=hmcHostname id=hmcHostname></td></tr>\n";
echo "<tr><td align=right><label for=hmcIP>HMC IP Address Pattern:</label></td><td align=left><input type=text name=hmcIP id=hmcIP></td></tr>\n";
echo "<tr><td align=right><label for=numCECs>Number of CECs per HMC:</label></td><td align=left><input type=text name=numCECs id=numCECs></td></tr>\n";
echo "<tr><td colspan=2 align=center><h3>Frame (BPA) Patterns</h3></td></tr>\n";
echo "<tr><td align=right><label for=bpaHostname>BPA Hostname Pattern:</label></td><td align=left><input type=text name=bpaHostname id=bpaHostname></td></tr>\n";
echo "<tr><td align=right><label for=bpaIP>BPA IP Address Pattern:</label></td><td align=left><input type=text name=bpaIP id=bpaIP></td></tr>\n";
echo "<tr><td colspan=2 align=center><h3>Drawer (FSP/CEC) Patterns</h3></td></tr>\n";
echo "<tr><td align=right><label for=fspHostname>FSP Hostname Pattern:</label></td><td align=left><input type=text name=fspHostname id=fspHostname></td></tr>\n";
echo "<tr><td align=right><label for=fspIP>FSP IP Address Pattern:</label></td><td align=left><input type=text name=fspIP id=fspIP></td></tr>\n";
echo "</table>\n";
//todo: get HCP userids/pws
}
//-----------------------------------------------------------------------------
function patterns2() {
echo "<table cellspacing=5>\n";
echo "<tr><td colspan=2 align=center><h3>Building Blocks</h3></td></tr>\n";
echo "<tr><td align=right><label for=numFrames>Number of Frames per Building Block:</label></td><td align=left><input type=text name=numFrames id=numFrames></td></tr>\n";
echo "<tr><td align=right><label for=subnet>Subnet Pattern for Cluster Mgmt LAN:</label></td><td align=left><input type=text name=subnet id=subnet></td></tr>";
echo "<tr><td colspan=2 align=center>(Subnet address in each Building Block)</td></tr>\n";
echo "<tr><td align=right><label for=ioNodename>I/O Node Name Pattern:</label></td><td align=left><input type=text name=ioNodename id=ioNodename></td></tr>\n";
echo "<tr><td align=right><label for=computeNodename>Compute Node Name Pattern:</label></td><td align=left><input type=text name=computeNodename id=computeNodename></td></tr>\n";
echo "<tr><td align=right><label for=hfiHostname>HFI NIC Hostname Pattern:</label></td><td align=left><input type=text name=hfiHostname id=hfiHostname></td></tr>\n";
echo "<tr><td align=right><label for=hfiIP>HFI NIC IP Address Pattern:</label></td><td align=left><input type=text name=hfiIP id=hfiIP></td></tr>\n";
echo "<tr><td colspan=2 align=center><h3>LPAR Information</h3></td></tr>\n";
echo "<tr><td align=right><label for=numLPARs>Number of LPARs per Drawer:</label></td><td align=left><input type=text name=numLPARs id=numLPARs></td></tr>\n";
echo "</table>\n";
// do we need to get any info about the resources that should be in each lpar, or do we just divide them evenly?
}
//-----------------------------------------------------------------------------
function preparemn() {
global $TOPDIR;
echo "<table class=wizardProgressTable border=0 cellspacing=10>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Write Cluster Topology Configuration File.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Define networks.</td></tr>\n"; // run makenetworks and update the dynamic range for the service LAN
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Configure DHCP.</td></tr>\n"; // run makedhcp and show progress
echo "</table>\n";
}
//-----------------------------------------------------------------------------
function prediscover() {
//todo: there's a better way to get this list left justified, but have the block in the center, but don't feel like figuring it out right now.
echo "<table><tr><td align=left>\n";
echo "<ol><li>Power on all of the HMCs.<li>Then power on all of frames.<li>Then click Next to discover the hardware on the service network.</ol>\n";
echo "</td></tr></table>\n";
}
//-----------------------------------------------------------------------------
function discover() {
global $TOPDIR;
//todo: run lsslp and show progress
echo "<table class=wizardProgressTable border=0 cellspacing=10>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Discovering HMCs, BPAs, and FSPs...</td></tr>\n";
echo "</table>\n";
echo "<p>(This will show the list of hw discovered & located, including nodenames and IP addresses assigned, and then save all info to the DB.)</p>\n";
}
//-----------------------------------------------------------------------------
function updatedefs() {
global $TOPDIR;
echo "<table class=wizardProgressTable border=0 cellspacing=10>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Determine which CECs each HMC should manage.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Assign frame numbers, supernode numbers, and building block numbers.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Assign building block subnets.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Update name resolution.</td></tr>\n"; // run makedhosts and makedns
echo "</table>\n";
}
//-----------------------------------------------------------------------------
function configurehcps() {
global $TOPDIR;
echo "<table class=wizardProgressTable border=0 cellspacing=10>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Assign CECs to their HMC.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Set frame numbers in BPAs.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Power on CECs to Standby.</td></tr>\n";
echo "</table>\n";
//todo: set HCP userids/pws
}
//-----------------------------------------------------------------------------
function createnodes() {
global $TOPDIR;
echo "<table class=wizardProgressTable border=0 cellspacing=10>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Create LPARs in each CEC.</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>Save node definitions in xCAT database.</td></tr>\n";
echo "</table>\n";
}
//-----------------------------------------------------------------------------
function testhcps() {
global $TOPDIR;
echo "<table class=wizardProgressTable border=0 cellspacing=10>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>(Output for rpower stat for sample nodes)</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>(Output for rinv for sample nodes)</td></tr>\n";
echo "<tr><td><img src='$TOPDIR/images/checked-box.gif'></td><td>(Output for rvitals for sample nodes)</td></tr>\n";
echo "</table>\n";
}
//-----------------------------------------------------------------------------
function done() {
global $TOPDIR;
echo "<p id=wizardDone>Cluster set up successfully completed!</p>\n";
echo "<p>You can now start to <a href='$TOPDIR/deploy/osimages.php'>deploy nodes</a>.</p>\n";
}
?>

View File

@ -5,7 +5,7 @@
$TOPDIR = '..';
require_once "$TOPDIR/lib/functions.php";
insertHeader('About', NULL, NULL, array('support','about'));
insertHeader('About xCAT Web Interface', NULL, NULL, array('support','about'));
?>
<h4>xCAT Web Interface version: ???</h4>
@ -14,7 +14,7 @@ insertHeader('About', NULL, NULL, array('support','about'));
<ul>
<li>Vallard Benincosa</li>
<li>Bruce Potter</li>
<li>Quyen Nguyen</li>
<li>Jarrod Johnson</li>
</ul>
</body>
</html>
<?php insertFooter(); ?>

View File

@ -7,5 +7,5 @@ require_once "$TOPDIR/lib/functions.php";
insertHeader('Diagnose', NULL, NULL, array('support','diagnose'));
insertNotDoneYet();
echo '</body></html>';
insertFooter();
?>

View File

@ -1,6 +1,6 @@
<?php
// Allow the user to set preferences for this web interface
// Tell users how to request enhancements
$TOPDIR = '..';
require_once "$TOPDIR/lib/functions.php";
@ -8,46 +8,16 @@ require_once "$TOPDIR/lib/functions.php";
insertHeader('Suggestions', NULL, NULL, array('support','suggest'));
?>
<h1>Send Sugestions to the CSM Development Team</h1>
<h1>Send Sugestions to the xCAT Development Team</h1>
<p>Suggestions, bug reports, bug fixes, etc., are always welcome. Please post them to the
<A href="http://xcat.org/mailman/listinfo/xcat-user" >xCAT mailing list</A>.
Contributions are also welcome, such as minor new features, better
images, or even whole new pages.
See <a href="https://sourceforge.net/projects/xcat">xCAT on SourceForge</a>. Thanks!</p>
images, whole new pages, or enhancements to base xCAT.
See the <a href="http://xcat.wiki.sourceforge.net/xCAT+2+Contribution+Guildelines">xCAT contribution guidelines</a>
for more information.</p>
<h3>Todo List</h3>
<p>To see what is already on our todo list for this web interface, or to request a new feature,
go to the <a href="http://xcat.wiki.sourceforge.net/Web+Interface+Wish+List">Web Interface Wish List</a>.</p>
<p>The following items are already on our todo list, in
approximately priority order:</p>
<ul>
<li>Update the spec file for this web interface to have all the necessary post installation scripts (Bruce)</li>
<li>One button update of this web interface from the internet (Bruce)</li>
<li>Improve the look of associating the top menu with the 2nd menu (Quyen)</li>
<li>Do frame view and rack layout pages (Bruce)</li>
<li>Do several of the buttons within the machines views (Bruce):
<ul>
<li>Attributes</li>
<li>Ping</li>
<li>Run Cmds</li>
<li>Copy Files</li>
<li>Create Group</li>
<li>Diagnose</li>
</ul>
</li>
<li>Do RMC configuration pages (Bruce)</li>
<li>Do Cluster Settings (site table) page (Bruce)</li>
<li>Start cluster wizard page (Bruce)</li>
<li>Do a summary page that lists # of bad nodes, # of jobs, etc.</li>
</ul>
<h3>Known Defects and Limitations</h3>
<ul>
<li>to be filled in...</li>
</ul>
<p>The <b>Change Log</b> describing recent enhancements is in the xcat-web spec file</a>.</p>
</body>
</html>
<?php insertFooter(); ?>

View File

@ -1,28 +1,12 @@
<?php
/* session_start(); */
$TOPDIR = '..';
require_once "$TOPDIR/functions.php";
insertHeader('Update xCAT Web Interface', $TOPDIR, '', '');
insertNav('updategui', $TOPDIR);
?>
<div id=content>
<P id=logo><IMG class=Middle src="<?= $TOPDIR ?>/images/xcatlogo.gif"></P>
<FORM name=updateguiForm action="updategui.php" class=NoMargin>
<?php
getPkg();
?>
</FORM>
</div>
</body>
</HTML>
require_once "$TOPDIR/lib/functions.php";
insertHeader('Update xCAT Web Interface', NULL, NULL, array('support','update'));
insertNotDoneYet();
insertFooter();
<?php
// Find, download, and install the xcat.web pkg
function getPkg() { //------------------------------------
$rpmname = 'xcat.web';