2011-09-12 19:47:26 +00:00
var provisionClock ;
2010-07-28 20:24:29 +00:00
/ * *
* Create nodes datatable for a given group
*
* @ param group
* Group name
* @ param outId
* Division ID to append datatable
* @ return Nodes datatable
* /
function createNodesDatatable ( group , outId ) {
// Get group nodes
$ . ajax ( {
url : 'lib/cmd.php' ,
dataType : 'json' ,
data : {
cmd : 'lsdef' ,
tgt : '' ,
args : group ,
msg : outId
} ,
/ * *
* Create nodes datatable
*
* @ param data
* Data returned from HTTP request
* @ return Nothing
* /
success : function ( data ) {
// Data returned
var rsp = data . rsp ;
2010-10-08 03:03:42 +00:00
// Get output ID
2010-07-28 20:24:29 +00:00
var outId = data . msg ;
2010-10-08 03:03:42 +00:00
// Get datatable ID
2010-07-28 20:24:29 +00:00
var dTableId = outId . replace ( 'DIV' , '' ) ;
// Node attributes hash
var attrs = new Object ( ) ;
// Node attributes
var headers = new Object ( ) ;
// Clear nodes datatable division
2011-02-17 09:06:21 +00:00
$ ( '#' + outId ) . empty ( ) ;
2010-07-28 20:24:29 +00:00
// Create nodes datatable
var node , args ;
for ( var i in rsp ) {
// Get node
var pos = rsp [ i ] . indexOf ( 'Object name:' ) ;
if ( pos > - 1 ) {
var temp = rsp [ i ] . split ( ': ' ) ;
node = jQuery . trim ( temp [ 1 ] ) ;
// Create a hash for the node attributes
attrs [ node ] = new Object ( ) ;
i ++ ;
}
// Get key and value
args = rsp [ i ] . split ( '=' ) ;
var key = jQuery . trim ( args [ 0 ] ) ;
var val = jQuery . trim ( args [ 1 ] ) ;
// Create hash table
attrs [ node ] [ key ] = val ;
headers [ key ] = 1 ;
}
// Sort headers
var sorted = new Array ( ) ;
for ( var key in headers ) {
sorted . push ( key ) ;
}
sorted . sort ( ) ;
// Add column for check box and node
sorted . unshift ( '<input type="checkbox" onclick="selectAllCheckbox(event, $(this))">' , 'node' ) ;
// Create nodes datatable
var dTable = new DataTable ( dTableId ) ;
dTable . init ( sorted ) ;
// Go through each node
for ( var node in attrs ) {
// Create a row
var row = new Array ( ) ;
// Create a check box
var checkBx = '<input type="checkbox" name="' + node + '"/>' ;
row . push ( checkBx , node ) ;
// Go through each header
for ( var i = 2 ; i < sorted . length ; i ++ ) {
// Add node attributes to the row
var key = sorted [ i ] ;
var val = attrs [ node ] [ key ] ;
if ( val ) {
row . push ( val ) ;
} else {
row . push ( '' ) ;
}
}
// Add row to table
dTable . add ( row ) ;
}
$ ( '#' + outId ) . append ( dTable . object ( ) ) ;
$ ( '#' + dTableId ) . dataTable ( ) ;
} // End of function(data)
} ) ;
}
/ * *
* Create provision existing node division
*
* @ param plugin
* Plugin name to create division for
* @ param inst
* Provision tab instance
* @ return Provision existing node division
* /
function createProvisionExisting ( plugin , inst ) {
// Create provision existing division and hide it
var provExisting = $ ( '<div></div>' ) . hide ( ) ;
// Create group input
var group = $ ( '<div></div>' ) ;
var groupLabel = $ ( '<label for="provType">Group:</label>' ) ;
group . append ( groupLabel ) ;
// Turn on auto complete for group
var dTableDivId = plugin + 'NodesDatatableDIV' + inst ; // Division ID where nodes datatable will be appended
2010-11-22 16:18:55 +00:00
var groupNames = $ . cookie ( 'groups' ) ;
2010-07-28 20:24:29 +00:00
if ( groupNames ) {
// Split group names into an array
var tmp = groupNames . split ( ',' ) ;
// Create drop down for groups
var groupSelect = $ ( '<select></select>' ) ;
groupSelect . append ( '<option></option>' ) ;
for ( var i in tmp ) {
// Add group into drop down
var opt = $ ( '<option value="' + tmp [ i ] + '">' + tmp [ i ] + '</option>' ) ;
groupSelect . append ( opt ) ;
}
group . append ( groupSelect ) ;
// Create node datatable
groupSelect . change ( function ( ) {
// Get group selected
var thisGroup = $ ( this ) . val ( ) ;
// If a valid group is selected
if ( thisGroup ) {
createNodesDatatable ( thisGroup , dTableDivId ) ;
} // End of if (thisGroup)
} ) ;
} else {
// If no groups are cookied
var groupInput = $ ( '<input type="text" name="group"/>' ) ;
group . append ( groupInput ) ;
}
provExisting . append ( group ) ;
// Create node input
var node = $ ( '<div></div>' ) ;
var nodeLabel = $ ( '<label for="nodeName">Nodes:</label>' ) ;
var nodeDatatable = $ ( '<div class="indent" id="' + dTableDivId + '"><p>Select a group to view its nodes</p></div>' ) ;
node . append ( nodeLabel ) ;
node . append ( nodeDatatable ) ;
provExisting . append ( node ) ;
// Create boot method drop down
var method = $ ( '<div></div>' ) ;
var methodLabel = $ ( '<label for="method">Boot method:</label>' ) ;
var methodSelect = $ ( '<select id="bootMethod" name="bootMethod"></select>' ) ;
2010-09-24 02:27:04 +00:00
methodSelect . append ( '<option value="boot">boot</option>'
+ '<option value="install">install</option>'
+ '<option value="iscsiboot">iscsiboot</option>'
+ '<option value="netboot">netboot</option>'
+ '<option value="statelite">statelite</option>'
) ;
2010-07-28 20:24:29 +00:00
method . append ( methodLabel ) ;
method . append ( methodSelect ) ;
provExisting . append ( method ) ;
// Create boot type drop down
var type = $ ( '<div></div>' ) ;
var typeLabel = $ ( '<label for="type">Boot type:</label>' ) ;
var typeSelect = $ ( '<select id="bootType" name="bootType"></select>' ) ;
2010-09-24 02:27:04 +00:00
typeSelect . append ( '<option value="pxe">pxe</option>'
+ '<option value="iscsiboot">yaboot</option>'
+ '<option value="zvm">zvm</option>'
) ;
2010-07-28 20:24:29 +00:00
type . append ( typeLabel ) ;
type . append ( typeSelect ) ;
provExisting . append ( type ) ;
// Create operating system input
var os = $ ( '<div></div>' ) ;
var osLabel = $ ( '<label for="os">Operating system:</label>' ) ;
var osInput = $ ( '<input type="text" name="os"/>' ) ;
osInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var tmp = $ . cookie ( 'osvers' ) ;
2010-07-28 20:24:29 +00:00
if ( tmp ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : tmp . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
os . append ( osLabel ) ;
os . append ( osInput ) ;
provExisting . append ( os ) ;
// Create architecture input
var arch = $ ( '<div></div>' ) ;
var archLabel = $ ( '<label for="arch">Architecture:</label>' ) ;
var archInput = $ ( '<input type="text" name="arch"/>' ) ;
archInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var tmp = $ . cookie ( 'osarchs' ) ;
2010-07-28 20:24:29 +00:00
if ( tmp ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : tmp . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
arch . append ( archLabel ) ;
arch . append ( archInput ) ;
provExisting . append ( arch ) ;
// Create profile input
var profile = $ ( '<div></div>' ) ;
var profileLabel = $ ( '<label for="profile">Profile:</label>' ) ;
var profileInput = $ ( '<input type="text" name="profile"/>' ) ;
profileInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var tmp = $ . cookie ( 'profiles' ) ;
2010-07-28 20:24:29 +00:00
if ( tmp ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : tmp . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
profile . append ( profileLabel ) ;
profile . append ( profileInput ) ;
provExisting . append ( profile ) ;
/ * *
* Provision existing
* /
var provisionBtn = createButton ( 'Provision' ) ;
provisionBtn . bind ( 'click' , function ( event ) {
// TODO Insert provision code here
2010-10-07 14:15:56 +00:00
openDialog ( 'info' , 'Under construction' ) ;
2010-07-28 20:24:29 +00:00
} ) ;
provExisting . append ( provisionBtn ) ;
return provExisting ;
}
/ * *
* Create provision new node division
*
* @ param inst
* Provision tab instance
* @ return Provision new node division
* /
function createProvisionNew ( plugin , inst ) {
// Create provision new node division
var provNew = $ ( '<div></div>' ) ;
// Create node input
var nodeName = $ ( '<div><label for="nodeName">Node:</label><input type="text" name="nodeName"/></div>' ) ;
provNew . append ( nodeName ) ;
// Create group input
var group = $ ( '<div></div>' ) ;
var groupLabel = $ ( '<label for="group">Group:</label>' ) ;
var groupInput = $ ( '<input type="text" name="group"/>' ) ;
groupInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var groupNames = $ . cookie ( 'groups' ) ;
2010-07-28 20:24:29 +00:00
if ( groupNames ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : groupNames . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
group . append ( groupLabel ) ;
group . append ( groupInput ) ;
provNew . append ( group ) ;
// Create boot method drop down
var method = $ ( '<div></div>' ) ;
var methodLabel = $ ( '<label for="method">Boot method:</label>' ) ;
var methodSelect = $ ( '<select id="bootMethod" name="bootMethod"></select>' ) ;
2010-09-24 02:27:04 +00:00
methodSelect . append ( '<option value="boot">boot</option>'
+ '<option value="install">install</option>'
+ '<option value="iscsiboot">iscsiboot</option>'
+ '<option value="netboot">netboot</option>'
+ '<option value="statelite">statelite</option>'
) ;
2010-07-28 20:24:29 +00:00
method . append ( methodLabel ) ;
method . append ( methodSelect ) ;
provNew . append ( method ) ;
// Create boot type drop down
var type = $ ( '<div></div>' ) ;
var typeLabel = $ ( '<label for="type">Boot type:</label>' ) ;
var typeSelect = $ ( '<select id="bootType" name="bootType"></select>' ) ;
2010-09-24 02:27:04 +00:00
typeSelect . append ( '<option value="install">pxe</option>'
+ '<option value="iscsiboot">yaboot</option>'
+ '<option value="zvm">zvm</option>'
) ;
2010-07-28 20:24:29 +00:00
type . append ( typeLabel ) ;
type . append ( typeSelect ) ;
provNew . append ( type ) ;
// Create operating system input
var os = $ ( '<div></div>' ) ;
var osLabel = $ ( '<label for="os">Operating system:</label>' ) ;
var osInput = $ ( '<input type="text" name="os"/>' ) ;
osInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var tmp = $ . cookie ( 'osvers' ) ;
2010-07-28 20:24:29 +00:00
if ( tmp ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : tmp . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
os . append ( osLabel ) ;
os . append ( osInput ) ;
provNew . append ( os ) ;
// Create architecture input
var arch = $ ( '<div></div>' ) ;
var archLabel = $ ( '<label for="arch">Architecture:</label>' ) ;
var archInput = $ ( '<input type="text" name="arch"/>' ) ;
archInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var tmp = $ . cookie ( 'osarchs' ) ;
2010-07-28 20:24:29 +00:00
if ( tmp ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : tmp . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
arch . append ( archLabel ) ;
arch . append ( archInput ) ;
provNew . append ( arch ) ;
// Create profile input
var profile = $ ( '<div></div>' ) ;
var profileLabel = $ ( '<label for="profile">Profile:</label>' ) ;
var profileInput = $ ( '<input type="text" name="profile"/>' ) ;
profileInput . one ( 'focus' , function ( ) {
2010-11-22 16:18:55 +00:00
var tmp = $ . cookie ( 'profiles' ) ;
2010-07-28 20:24:29 +00:00
if ( tmp ) {
// Turn on auto complete
2011-01-14 15:16:44 +00:00
$ ( this ) . autocomplete ( {
source : tmp . split ( ',' )
} ) ;
2010-07-28 20:24:29 +00:00
}
} ) ;
profile . append ( profileLabel ) ;
profile . append ( profileInput ) ;
provNew . append ( profile ) ;
/ * *
* Provision new node
* /
var provisionBtn = createButton ( 'Provision' ) ;
provisionBtn . bind ( 'click' , function ( event ) {
// TODO Insert provision code here
2010-10-07 14:15:56 +00:00
openDialog ( 'info' , 'Under construction' ) ;
2010-07-28 20:24:29 +00:00
} ) ;
provNew . append ( provisionBtn ) ;
return provNew ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
/ * *
* Create provision node division
*
* @ param plugin
* Plugin name to create division for
* @ param container
* Container to hold provisioning form
* @ return Nothing
* /
2011-08-24 10:30:30 +00:00
function createProvision ( plugin , container ) {
2011-09-12 19:47:26 +00:00
// Group, nodes, arch
if ( 'quick' == plugin ) {
2011-08-24 10:30:30 +00:00
container . append ( createProvWithUrl ( ) ) ;
2011-09-12 19:47:26 +00:00
} else {
container . append ( createProvNoUrl ( plugin ) ) ;
container . find ( '#' + plugin + 'group' ) . bind ( 'change' , function ( ) {
var pluginName = $ ( this ) . attr ( 'id' ) . replace ( 'group' , '' ) ;
$ ( '#' + pluginName + 'SelectNodesTable' ) . html ( '<img src="images/loader.gif"></img>' ) ;
createNodesArea ( $ ( this ) . val ( ) , pluginName + 'SelectNodesTable' ) ;
2011-08-24 10:30:30 +00:00
} ) ;
}
2011-09-12 19:47:26 +00:00
// Advanced options
2011-09-02 07:48:30 +00:00
container . append ( '<div id="advoption"></div>' ) ;
2011-08-24 10:30:30 +00:00
2011-09-12 19:47:26 +00:00
// Add provision button
2011-08-24 10:30:30 +00:00
var provisionBtn = createButton ( 'Provision' ) ;
provisionBtn . bind ( 'click' , function ( ) {
var plugin = $ ( this ) . parent ( ) . parent ( ) . attr ( 'id' ) . replace ( 'ProvisionTab' , '' ) ;
quickProvision ( plugin ) ;
} ) ;
provisionBtn . hide ( ) ;
container . append ( provisionBtn ) ;
2011-09-12 19:47:26 +00:00
// Bind image select to change event
2011-08-24 10:30:30 +00:00
container . find ( '#' + plugin + 'image' ) . bind ( 'change' , function ( ) {
var temp = $ ( this ) . attr ( 'id' ) ;
temp = temp . replace ( 'image' , '' ) ;
$ ( '#' + temp + 'ProvisionTab #advoption' ) . html ( '<img src="images/loader.gif"></img>' ) ;
provAdvOption ( $ ( this ) . val ( ) , temp ) ;
} ) ;
$ . ajax ( {
url : 'lib/cmd.php' ,
dataType : 'json' ,
data : {
cmd : 'lsdef' ,
tgt : '' ,
args : '-t;osimage' ,
msg : plugin
} ,
success : function ( data ) {
2011-09-12 19:47:26 +00:00
var containerId = data . msg + 'ProvisionTab' ;
var i = 0 ;
var imageName = 0 ;
2011-08-24 10:30:30 +00:00
var position = 0 ;
2011-09-12 19:47:26 +00:00
var imageSelect = $ ( '#' + containerId + ' #' + data . msg + 'image' ) ;
$ ( '#' + containerId + ' img' ) . remove ( ) ;
if ( ! data . rsp . length ) {
$ ( '#' + containerId ) . prepend ( createWarnBar ( 'Please run copycds and genimage in provision page before continuing!' ) ) ;
2011-08-24 10:30:30 +00:00
return ;
}
2011-09-12 19:47:26 +00:00
for ( i in data . rsp ) {
imageName = data . rsp [ i ] ;
position = imageName . indexOf ( ' ' ) ;
imageName = imageName . substr ( 0 , position ) ;
2011-08-24 10:30:30 +00:00
2011-09-12 19:47:26 +00:00
imageSelect . append ( $ ( '<option value="' + imageName + '">' + imageName + '</option>' ) ) ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
// Trigger select change event
imageSelect . trigger ( 'change' ) ;
// Show provision button
$ ( '#' + containerId + ' button' ) . show ( ) ;
2011-08-24 10:30:30 +00:00
}
} ) ;
}
2011-09-12 19:47:26 +00:00
/ * *
* Create provision node division using URL
*
* @ returns Provisiong node division
* /
2011-08-24 10:30:30 +00:00
function createProvWithUrl ( ) {
2011-09-12 19:47:26 +00:00
var queryStr = window . location . search ;
var argArray = queryStr . substr ( 1 ) . split ( '&' ) ;
var tempHash = new Object ( ) ;
var i = 0 ;
var tempArray ;
var provHtml = '' ;
2011-09-02 07:48:30 +00:00
var master = '' ;
var tftpserver = '' ;
2011-09-12 19:47:26 +00:00
var nfsserver = '' ;
for ( i = 0 ; i < argArray . length ; i ++ ) {
tempArray = argArray [ i ] . split ( '=' ) ;
tempHash [ tempArray [ 0 ] ] = tempArray [ 1 ] ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
provHtml += '<div><label>Nodes:</label><input type="text" disabled="disabled" value="' + tempHash [ 'nodes' ] + '"></div>' ;
provHtml += '<div><label>Architecture:</label><input type="text" disabled="disabled" value="' + tempHash [ 'arch' ] + '"></div>' ;
provHtml += '<div><label>Image:</label><select id="quickimage"></select><img src="images/loader.gif"></img></div>' +
'<div><label>Install NIC:</label><input value="mac"/></div>' +
'<div><label>Primary NIC:</label><input value="mac"/></div>' ;
2011-09-02 07:48:30 +00:00
2011-09-12 19:47:26 +00:00
if ( tempHash [ 'master' ] ) {
master = tempHash [ 'master' ] ;
2011-09-02 07:48:30 +00:00
}
2011-09-12 19:47:26 +00:00
if ( tempHash [ 'nfsserver' ] ) {
nfsserver = tempHash [ 'nfsserver' ] ;
2011-09-02 07:48:30 +00:00
}
2011-09-12 19:47:26 +00:00
if ( tempHash [ 'tftpserver' ] ) {
tftpserver = tempHash [ 'tftpserver' ] ;
2011-09-02 07:48:30 +00:00
}
2011-09-12 19:47:26 +00:00
provHtml += '<div><label>xCAT master:</label><input type="text" value="' + master + '"></div>' ;
provHtml += '<div><label>TFTP server:</label><input type="text" value="' + tftpserver + '"></div>' ;
provHtml += '<div><label>NFS server:</label><input type="text" value="' + nfsserver + '"></div>' ;
return provHtml ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
/ * *
* Create provision node division without using URL
*
* @ param plugin
* Plugin name to create division for
* @ returns { String }
* /
function createProvNoUrl ( plugin ) {
// Select group
var groupHtml = '<div><label>Group:</label>' ;
2011-08-24 10:30:30 +00:00
var groupNames = $ . cookie ( 'groups' ) ;
if ( groupNames ) {
2011-09-12 19:47:26 +00:00
groupHtml += '<select id="' + plugin + 'group"><option></option>' ;
2011-08-24 10:30:30 +00:00
var temp = groupNames . split ( ',' ) ;
for ( var i in temp ) {
2011-09-12 19:47:26 +00:00
groupHtml += '<option value="' + temp [ i ] + '">' + temp [ i ] + '</option>' ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
groupHtml += '</select>' ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
groupHtml += '</div>' ;
2011-08-24 10:30:30 +00:00
2011-09-12 19:47:26 +00:00
// Select nodes
var nodesHtml = '<div><label>Nodes:</label><div id="' + plugin + 'SelectNodesTable" style="display: inline-block; width:700px; overflow-y:auto;">Select a group to view its nodes</div></div>' ;
2011-08-24 10:30:30 +00:00
2011-09-12 19:47:26 +00:00
// Select architecture
var archHtml = '<div><label>Architecture:</label>' ;
2011-08-24 10:30:30 +00:00
var archName = $ . cookie ( 'osarchs' ) ;
2011-09-12 19:47:26 +00:00
if ( archName ) {
archHtml += '<select id="arch">' ;
2011-08-24 10:30:30 +00:00
var temp = archName . split ( ',' ) ;
for ( var i in temp ) {
2011-09-12 19:47:26 +00:00
archHtml += '<option value="' + temp [ i ] + '">' + temp [ i ] + '</option>' ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
archHtml += '</select>' ;
2011-08-24 10:30:30 +00:00
} else {
2011-09-12 19:47:26 +00:00
archHtml += '<input type="text" id="arch">' ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
archHtml += '</div>' ;
// Add static input part
var staticHtml = '<div><label>Image:</label><select id="' + plugin + 'image"></select><img src="images/loader.gif"></img></div>' +
'<div><label>Install NIC:</label><input value="mac"/></div>' +
'<div><label>Primary NIC:</label><input value="mac"/></div>' +
'<div><label>xCAT Master:</label><input/></div>' +
'<div><label>TFTP Server:</label><input/></div>' +
'<div><label>NFS Server:</label><input/></div>' ;
return groupHtml + nodesHtml + archHtml + staticHtml ;
2011-08-24 10:30:30 +00:00
}
/ * *
2011-09-12 19:47:26 +00:00
* Get needed fields for provsioning and send command to server
2011-08-24 10:30:30 +00:00
*
2011-09-12 19:47:26 +00:00
* @ param plugin
* Plugin name of platform to provision
2011-08-24 10:30:30 +00:00
* @ return Nothing
* /
function quickProvision ( plugin ) {
2011-09-12 19:47:26 +00:00
var errorMessage = '' ;
2011-08-24 10:30:30 +00:00
var argsArray = new Array ( ) ;
var nodesName = '' ;
var provisionArg = '' ;
var provisionFrame ;
var imageName = '' ;
var url = '' ;
var softwareArg = '' ;
2011-09-12 19:47:26 +00:00
var containerId = plugin + 'ProvisionTab' ;
$ ( '#' + containerId + ' .ui-state-error' ) . remove ( ) ;
2011-08-24 10:30:30 +00:00
2011-09-12 19:47:26 +00:00
$ ( '#' + containerId + ' input[type!="checkbox"]' ) . each ( function ( ) {
if ( ! $ ( this ) . val ( ) ) {
2011-12-01 04:10:40 +00:00
errorMessage = 'Please provide a value for each missing field!' ;
2011-08-24 10:30:30 +00:00
return false ;
2011-09-12 19:47:26 +00:00
} else {
2011-08-24 10:30:30 +00:00
argsArray . push ( $ ( this ) . val ( ) ) ;
}
} ) ;
2011-09-12 19:47:26 +00:00
if ( errorMessage ) {
$ ( '#' + containerId ) . prepend ( '<p class="ui-state-error">' + errorMessage + '</p>' ) ;
2011-08-24 10:30:30 +00:00
return ;
}
2011-09-12 19:47:26 +00:00
// If jumped from nodes page, get node names
if ( 'quick' == plugin ) {
2011-08-24 10:30:30 +00:00
nodesName = argsArray . shift ( ) ;
}
2011-09-12 19:47:26 +00:00
// Select platform, get node names from table checkbox
else {
// Should unshift the arch type
argsArray . unshift ( $ ( '#' + containerId + ' #arch' ) . val ( ) ) ;
nodesName = getCheckedByObj ( $ ( '#' + containerId + ' #' + plugin + 'SelectNodesTable' ) ) ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
if ( ! nodesName ) {
$ ( '#' + containerId ) . prepend ( '<p class="ui-state-error">Please select a node</p>' ) ;
2011-08-24 10:30:30 +00:00
return ;
}
2011-09-12 19:47:26 +00:00
softwareArg = getCheckedByObj ( $ ( '#' + containerId + ' #advoption' ) ) ;
imageName = $ ( '#' + containerId + ' #' + plugin + 'image' ) . val ( ) ;
2011-08-24 10:30:30 +00:00
provisionArg = argsArray . join ( ',' ) ;
2011-09-12 19:47:26 +00:00
2011-08-24 10:30:30 +00:00
url = 'lib/cmd.php?cmd=webrun&tgt=&args=provision;' + nodesName + ';' + imageName + ';' +
provisionArg + ';' + softwareArg + '&msg=&opts=flush' ;
2011-09-12 19:47:26 +00:00
// Show output
2011-08-24 10:30:30 +00:00
var deployDia = $ ( '<div id="deployDia"></div>' ) ;
deployDia . append ( createLoader ( ) ) . append ( '<br/>' ) ;
deployDia . append ( '<iframe id="provisionFrame" width="95%" height="90%" src="' + url + '"></iframe>' ) ;
deployDia . dialog ( {
modal : true ,
width : 600 ,
height : 480 ,
2011-09-12 19:47:26 +00:00
title : 'Provision return' ,
2011-08-24 10:30:30 +00:00
close : function ( ) { $ ( this ) . remove ( ) ; } ,
buttons : {
Close : function ( ) { $ ( this ) . dialog ( 'close' ) ; }
}
} ) ;
provisionStopCheck ( ) ;
}
2011-09-12 19:47:26 +00:00
/ * *
* Create provisioning advance option
*
* @ param imagename
* Image name
* @ param plugin
* Plugin name of platform to provision
* @ return Nothing
* /
function provAdvOption ( imagename , plugin ) {
2011-08-24 10:30:30 +00:00
$ . ajax ( {
url : 'lib/cmd.php' ,
dataType : 'json' ,
data : {
cmd : 'lsdef' ,
tgt : '' ,
args : '-t;osimage;' + imagename + ';-i;osname,provmethod' ,
msg : plugin
} ,
2011-09-12 19:47:26 +00:00
success : function ( data ) {
var containerId = data . msg + 'ProvisionTab' ;
var i = 0 ;
var osName = '' ;
var provMethod = '' ;
var tempStr = '' ;
2011-08-24 10:30:30 +00:00
var position = 0 ;
2011-09-12 19:47:26 +00:00
for ( i = 0 ; i < data . rsp . length ; i ++ ) {
tempStr = data . rsp [ i ] ;
if ( tempStr . indexOf ( 'osname' ) != - 1 ) {
position = tempStr . indexOf ( '=' ) ;
osName = tempStr . substr ( position + 1 ) ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
if ( tempStr . indexOf ( 'provmethod' ) != - 1 ) {
position = tempStr . indexOf ( '=' ) ;
provMethod = tempStr . substr ( position + 1 ) ;
2011-08-24 10:30:30 +00:00
}
}
2011-09-12 19:47:26 +00:00
$ ( '#' + containerId + ' #advoption' ) . empty ( ) ;
if ( 'aix' == osName . toLowerCase ( ) ) {
2011-08-24 10:30:30 +00:00
return ;
}
2011-09-12 19:47:26 +00:00
if ( 'install' == provMethod ) {
$ ( '#' + containerId + ' #advoption' ) . html ( '<input type="checkbox" checked="checked" name="ganglia">Install Ganglia.' ) ;
2011-08-24 10:30:30 +00:00
}
}
} ) ;
}
/ * *
2011-09-12 19:47:26 +00:00
* Refresh nodes area base on group selected
2011-08-24 10:30:30 +00:00
*
2011-09-12 19:47:26 +00:00
* @ param groupName
* Group name
* @ param areaId
* Area ID to refresh
2011-08-24 10:30:30 +00:00
* @ return Nothing
* /
function createNodesArea ( groupName , areaId ) {
// Get group nodes
$ . ajax ( {
url : 'lib/cmd.php' ,
dataType : 'json' ,
data : {
cmd : 'nodels' ,
tgt : groupName ,
args : '' ,
msg : areaId
} ,
success : function ( data ) {
var areaObj = $ ( '#' + data . msg ) ;
var nodes = data . rsp ;
var index ;
2011-09-12 19:47:26 +00:00
var nodesHtml = '<table><thead><tr><th><input type="checkbox" onclick="selectAllCheckbox(event, $(this))"></th>' ;
nodesHtml += '<th>Node</th></tr></thead><tbody>' ;
2011-08-24 10:30:30 +00:00
for ( index in nodes ) {
var node = nodes [ index ] [ 0 ] ;
2011-09-12 19:47:26 +00:00
if ( ! node ) {
2011-08-24 10:30:30 +00:00
continue ;
}
2011-09-12 19:47:26 +00:00
nodesHtml += '<tr><td><input type="checkbox" name="' + node + '"/></td><td>' + node + '</td></tr>' ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
nodesHtml += '</tbody></table>' ;
areaObj . empty ( ) . append ( nodesHtml ) ;
2011-08-24 10:30:30 +00:00
if ( index > 10 ) {
areaObj . css ( 'height' , '300px' ) ;
} else {
areaObj . css ( 'height' , 'auto' ) ;
}
} // End of function(data)
} ) ;
}
function provisionStopCheck ( ) {
var content = $ ( '#provisionFrame' ) . contents ( ) . find ( 'body' ) . text ( ) ;
2011-09-12 19:47:26 +00:00
if ( content . indexOf ( 'provision stop' ) != - 1 ) {
2011-08-24 10:30:30 +00:00
$ ( '#deployDia img' ) . remove ( ) ;
clearTimeout ( provisionClock ) ;
2011-09-12 19:47:26 +00:00
} else {
2011-08-24 10:30:30 +00:00
provisionClock = setTimeout ( 'provisionStopCheck()' , 5000 ) ;
}
}
/ * *
2011-09-12 19:47:26 +00:00
* Get select element names
2011-08-24 10:30:30 +00:00
*
2011-09-12 19:47:26 +00:00
* @ param obj
* Object to get selected element names
* @ return Nodes name seperate by a comma
2011-08-24 10:30:30 +00:00
* /
function getCheckedByObj ( obj ) {
2011-09-12 19:47:26 +00:00
var str = '' ;
2011-08-24 10:30:30 +00:00
// Get nodes that were checked
obj . find ( 'input:checked' ) . each ( function ( ) {
if ( $ ( this ) . attr ( 'name' ) ) {
2011-09-12 19:47:26 +00:00
str += $ ( this ) . attr ( 'name' ) + ',' ;
2011-08-24 10:30:30 +00:00
}
} ) ;
2011-09-12 19:47:26 +00:00
if ( str ) {
str = str . substr ( 0 , str . length - 1 ) ;
2011-08-24 10:30:30 +00:00
}
2011-09-12 19:47:26 +00:00
return str ;
2010-07-28 20:24:29 +00:00
}