xcat-core/xCAT-UI/lib/cmd.php

136 lines
3.3 KiB
PHP
Raw Normal View History

<?php
/* Required libraries */
$TOPDIR = '..';
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/jsonwrapper.php";
/**
* Issue a xCAT command, e.g. rinv gpok123 all
* This will handle most commands. If not, you can create your
* own .php. Look at zCmd.php for an example.
*
* @param $cmd The xCAT command
* $tgt The target node or group
* $args The xCAT command arguments, separated by semicolons
* @return The xCAT response. Replies are in the form of JSON
*/
if (isset($_GET["cmd"])) {
// HTTP GET requests
$cmd = $_GET["cmd"];
$tgt = $_GET["tgt"];
$args = $_GET["args"];
// Special messages put here
// This gets sent back to the AJAX request as is.
$msg = $_GET["msg"];
// If no $tgt is given, set $tgt to NULL
if (!$tgt) {
$tgt = NULL;
}
// If no $msg is given, set $msg to NULL
if (!$msg) {
$msg = NULL;
}
// If $args contains multiple arguments, split it into an array
if (strpos($args,";")) {
// Split the arguments into an array
$arr = array();
$arr = explode(";", $args);
} else {
$arr = array($args);
}
// Submit request and get response
$xml = docmd($cmd, $tgt, $arr);
$rsp = array();
// webrun pping output needs special handling
if(strncasecmp($cmd, "webrun", 6) == 0 && stristr($args, "pping")) {
$rsp = extractWebrun($xml);
}
// nodels output needs special handling
else if(strncasecmp($cmd, "nodels", 6) == 0) {
// Handle the output the same way as webrun
$rsp = extractWebrun($xml);
}
// extnoderange output needs special handling
// This command gets the nodes and groups
else if(strncasecmp($cmd, "extnoderange", 12) == 0) {
$rsp = extractExtnoderange($xml);
}
// Handle the typical output
else {
foreach ($xml->children() as $child) {
// Get the 1st level child
foreach ($child->children() as $level_one) {
if ($level_one->children()) {
// Get the 2nd level child
foreach ($level_one->children() as $level_two) {
if ($level_two->children()) {
// Get the 3rd level child
foreach ($level_two->children() as $level_three) {
array_push($rsp, "$level_three");
}
} else {
array_push($rsp, "$level_two");
}
}
} else {
array_push($rsp, "$level_one");
}
}
}
}
// Reply in the form of JSON
$rtn = array("rsp" => $rsp, "msg" => $msg);
echo json_encode($rtn);
}
/**
* Extract the output for a webrun command
*
* @param $xml The XML output from docmd()
* @return An array containing the output
*/
function extractWebrun($xml) {
$rsp = array();
$i = 0;
// Extract data returned
foreach($xml->children() as $nodes){
foreach($nodes->children() as $node){
// Get the node name
$name = $node->name;
// Get the content
$status = $node->data->contents;
// Add to return array
$rsp[$i] = array("$name", "$status");
$i++;
}
}
return $rsp;
}
/**
* Extract the output for a extnoderange command
*
* @param $xml The XML output from docmd()
* @return The nodes and groups
*/
function extractExtnoderange($xml) {
$rsp = array();
// Extract data returned
foreach ($xml->xcatresponse->intersectinggroups as $group) {
array_push($rsp, "$group");
}
return $rsp;
}
?>