mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 11:22:27 +00:00 
			
		
		
		
	Fixed bugs in xCAT-UI: fixed spacing issues, set default commands for guest users, set default arch and hypervisor for add z/VM node, and fixed dialog for adding SCSI/FCP device directly using WWPN & LUN.
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@16690 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -75,7 +75,7 @@ function loadConfigPage() { | ||||
|     tab.add('discoverTab', 'Discover', '', false); | ||||
|      | ||||
|     // Add the self-service tab | ||||
|     tab.add('serviceTab', 'Service', '', false);     | ||||
|     tab.add('serviceTab', 'Service', '', false); | ||||
|  | ||||
|     // Get list of tables and their descriptions | ||||
|     $.ajax({ | ||||
| @@ -98,7 +98,7 @@ function loadConfigPage() { | ||||
|     		return; | ||||
|     	} | ||||
|     	 | ||||
|         if (ui.index == 1) {        	 | ||||
|         if (ui.index == 1) { | ||||
|         	loadUpdatePage(); | ||||
|         } else if (ui.index == 2) { | ||||
|         	loadUserPage(); | ||||
|   | ||||
| @@ -328,8 +328,6 @@ function openCreateUserDialog(data) { | ||||
|                     args += ' policy.name=' + usrName; | ||||
|                 } if (host) { | ||||
|                     args += " policy.host='" + host + "'"; | ||||
|                 } if (commands) { | ||||
|                     args += " policy.commands='" + commands + "'"; | ||||
|                 } if (parameters) { | ||||
|                     args += " policy.parameters='" + parameters + "'"; | ||||
|                 } if (nodeRange) { | ||||
| @@ -347,6 +345,13 @@ function openCreateUserDialog(data) { | ||||
|                 	args += " policy.comments=''"; | ||||
|                 } | ||||
|                  | ||||
|                 // Handle cases where there are commands and no commands | ||||
|                 if (commands) { | ||||
|                     args += " policy.commands='" + commands + "'"; | ||||
|                 } else { | ||||
|                 	args += " policy.commands=''"; | ||||
|                 } | ||||
|                  | ||||
|                 // Trim any extra spaces | ||||
|                 args = jQuery.trim(args);   | ||||
|                  | ||||
| @@ -396,21 +401,30 @@ function openCreateUserDialog(data) { | ||||
|     // Change comments if access checkbox is checked | ||||
|     typeSelect.change(function() { | ||||
|     	var comments = createUserForm.find('input[name=comments]').val(); | ||||
|     	var tag = "privilege:root"; | ||||
|     	comments = jQuery.trim(comments);   | ||||
|     	var cmds = createUserForm.find('input[name=commands]').val(); | ||||
|     	comments = jQuery.trim(comments); | ||||
|     	cmds = jQuery.trim(cmds); | ||||
|     	 | ||||
|     	// Append tag to comments | ||||
|     	var tag = "privilege:root"; | ||||
|     	 | ||||
|     	// The list of every command used by the self-service page | ||||
|     	// Every command must be separated by a comma | ||||
|     	var authorizedCmds = "authcheck,lsdef,nodestat,tabdump,rinv,rpower,rmvm,webportal,webrun"; | ||||
|     	 | ||||
|     	// Append tag to commands and comments | ||||
|     	if (typeSelect.val().indexOf("admin") > -1) {  		 | ||||
|     		if (comments && comments.charAt(comments.length - 1) != ";") { | ||||
|     			comments += ";"; | ||||
|     		} | ||||
|     		 | ||||
|     		comments += tag; | ||||
|     		createUserForm.find('input[name=comments]').val(comments); | ||||
|     		createUserForm.find('input[name=comments]').val(comments);    		 | ||||
|     		createUserForm.find('input[name=commands]').val(""); | ||||
|     	} else { | ||||
|     		comments = comments.replace(tag, ""); | ||||
|     		comments = comments.replace(";;", ";"); | ||||
|     		createUserForm.find('input[name=comments]').val(comments); | ||||
|     		createUserForm.find('input[name=comments]').val(comments);    		 | ||||
|     		createUserForm.find('input[name=commands]').val(authorizedCmds); | ||||
|     	} | ||||
|     	 | ||||
|     	// Strip off leading semi-colon | ||||
| @@ -453,6 +467,9 @@ function openCreateUserDialog(data) { | ||||
|         if (comments.indexOf("privilege:root") > -1) { | ||||
|         	typeSelect.val("admin"); | ||||
|         } | ||||
|     } else { | ||||
|     	// Default user type to guest | ||||
|     	typeSelect.val("guest").change(); | ||||
|     } | ||||
| } | ||||
| /** | ||||
|   | ||||
| @@ -2085,12 +2085,12 @@ zvmPlugin.prototype.addNode = function() { | ||||
|                             var args = ""; | ||||
|                             if (type == 'host') { | ||||
|                                 args = node + ';zvm.hcp=' + hcp | ||||
|                                     + ';nodehm.mgt=zvm;hypervisor.type=zvm;groups=' + group | ||||
|                                     + ';nodehm.mgt=zvm;nodetype.arch=s390x;hypervisor.type=zvm;groups=' + group | ||||
|                                     + ';nodetype.os=' + os; | ||||
|                             } else { | ||||
|                                 args = node + ';zvm.hcp=' + hcp | ||||
|                                     + ';zvm.userid=' + userId | ||||
|                                     + ';nodehm.mgt=zvm' + ';groups=' + group; | ||||
|                                     + ';nodehm.mgt=zvm' + ';nodetype.arch=s390x' + ';groups=' + group; | ||||
|                             }                             | ||||
|                              | ||||
|                             if (ipRange != "" && ipRange != null) { | ||||
| @@ -2164,12 +2164,12 @@ zvmPlugin.prototype.addNode = function() { | ||||
|                         var args = ""; | ||||
|                         if (type == 'host') { | ||||
|                             args = nodeRange + ';zvm.hcp=' + hcp | ||||
|                                 + ';nodehm.mgt=zvm;hypervisor.type=zvm;groups=' + group | ||||
|                                 + ';nodehm.mgt=zvm;nodetype.arch=s390x;hypervisor.type=zvm;groups=' + group | ||||
|                                 + ';nodetype.os=' + os; | ||||
|                         } else { | ||||
|                             args = nodeRange + ';zvm.hcp=' + hcp | ||||
|                                 + ';zvm.userid=' + userIdRange | ||||
|                                 + ';nodehm.mgt=zvm' + ';groups=' + group; | ||||
|                                 + ';nodehm.mgt=zvm' + ';nodetype.arch=s390x' + ';groups=' + group; | ||||
|                         }  | ||||
|                          | ||||
|                         if (ipRange) | ||||
|   | ||||
| @@ -80,7 +80,7 @@ function loadHcpInfo(data) { | ||||
|     if (userEntry[0].indexOf('Failed') < 0) { | ||||
|         if (hcp) { | ||||
|             // If there is no cookie for the disk pool names | ||||
|             if (!$.cookie(hcp + 'diskpools')) { | ||||
|             if (!$.cookie(hcp + 'diskpools') || $.cookie(hcp + 'diskpools') === null) { | ||||
|                 // Get disk pools | ||||
|                 $.ajax( { | ||||
|                     url : 'lib/cmd.php', | ||||
| @@ -97,7 +97,7 @@ function loadHcpInfo(data) { | ||||
|             } | ||||
|              | ||||
|             // If there is no cookie for the zFCP pool names | ||||
|             if (!$.cookie(hcp + 'zfcppools')) { | ||||
|             if (!$.cookie(hcp + 'zfcppools') || $.cookie(hcp + 'zfcppools') === null) { | ||||
|                 // Get disk pools | ||||
|                 $.ajax( { | ||||
|                     url : 'lib/cmd.php', | ||||
| @@ -114,7 +114,7 @@ function loadHcpInfo(data) { | ||||
|             } | ||||
|          | ||||
|             // If there is no cookie for the network names | ||||
|             if (!$.cookie(hcp + 'networks')) { | ||||
|             if (!$.cookie(hcp + 'networks') || $.cookie(hcp + 'networks') === null) { | ||||
|                 // Get network names | ||||
|                 $.ajax( { | ||||
|                     url : 'lib/cmd.php', | ||||
| @@ -955,7 +955,8 @@ function getZResources(data) { | ||||
|         for (var key in hcpHash) { | ||||
|             // Get the short host name | ||||
|             hcp = key.split('.')[0]; | ||||
|             hcps.push(hcp); | ||||
|             if (jQuery.inArray(hcp, hcps) == -1) | ||||
|                 hcps.push(hcp); | ||||
|         } | ||||
|  | ||||
|         // Set hardware control point cookie | ||||
| @@ -1159,7 +1160,7 @@ function openAddProcDialog(node) { | ||||
|     procType.append(typeSelect); | ||||
|     addProcForm.append(procType); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addProcForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1248,7 +1249,7 @@ function openAddDiskDialog(node, hcp) { | ||||
|     var cookie = $.cookie(hcp + 'diskpools'); | ||||
|     var pools = new Array(); | ||||
|     if (cookie) { | ||||
|     	pools = cookie.split(','); | ||||
|         pools = cookie.split(','); | ||||
|     } | ||||
|      | ||||
|     // Create form to add disk | ||||
| @@ -1288,7 +1289,7 @@ function openAddDiskDialog(node, hcp) { | ||||
|  | ||||
|     addDiskForm.append('<div><label>Disk password:</label><input type="password" id="diskPassword" name="diskPassword" title="Optional. Defines the read, write, and multi password that will be used for accessing the disk."/></div>'); | ||||
|  | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addDiskForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1411,7 +1412,7 @@ function openAddZfcpDialog(node, hcp, zvm) { | ||||
|     var cookie = $.cookie(hcp + 'zfcppools'); | ||||
|     var pools = new Array(); | ||||
|     if (cookie) { | ||||
|     	pools = cookie.split(','); | ||||
|         pools = cookie.split(','); | ||||
|     } | ||||
|      | ||||
|     // Create form to add disk | ||||
| @@ -1452,7 +1453,7 @@ function openAddZfcpDialog(node, hcp, zvm) { | ||||
|         advanced.toggle(); | ||||
|     }); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addZfcpForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1492,9 +1493,9 @@ function openAddZfcpDialog(node, hcp, zvm) { | ||||
|                 var loaddev = $(this).find('input[name=diskLoaddev]'); | ||||
|                 var size = $(this).find('input[name=diskSize]').val(); | ||||
|                 var pool = $(this).find('select[name=diskPool]').val(); | ||||
|                 var tag = $(this).find('select[name=diskTag]').val(); | ||||
|                 var portName = $(this).find('select[name=diskPortName]').val(); | ||||
|                 var unitNo = $(this).find('select[name=diskUnitNo]').val(); | ||||
|                 var tag = $(this).find('input[name=diskTag]').val(); | ||||
|                 var portName = $(this).find('input[name=diskPortName]').val(); | ||||
|                 var unitNo = $(this).find('input[name=diskUnitNo]').val(); | ||||
|                  | ||||
|                 // If inputs are not complete, show warning message | ||||
|                 if (!node || !address || !size || !pool) { | ||||
| @@ -1511,10 +1512,12 @@ function openAddZfcpDialog(node, hcp, zvm) { | ||||
|                      | ||||
|                     if (tag && tag != "null") { | ||||
|                         args += '||' + tag; | ||||
|                     } if (portName && tag != "null") { | ||||
|                         args += '||' + portName; | ||||
|                     } if (unitNo && tag != "null") { | ||||
|                         args += '||' + unitNo; | ||||
|                     } else { | ||||
|                     	args += '|| ""'; | ||||
|                     } | ||||
|                      | ||||
|                     if ((portName && portName != "null") && (unitNo && unitNo != "null")) { | ||||
|                         args += '||' + portName + '||' + unitNo; | ||||
|                     } | ||||
|                      | ||||
|                     // Add zFCP device | ||||
| @@ -1572,7 +1575,7 @@ function openDedicateDeviceDialog(node, hcp) { | ||||
|             '<option value="1">Read-only</option>' + | ||||
|         '</select>'); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     dedicateForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1675,7 +1678,7 @@ function openAddEckd2SystemDialog(hcp) { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|      | ||||
|     // Create info bar | ||||
| @@ -1685,7 +1688,7 @@ function openAddEckd2SystemDialog(hcp) { | ||||
|     addE2SForm.append(system);     | ||||
|     addE2SForm.append('<div><label>Device number:</label><input type="text" name="devNum" value="" maxlength="4" title="The disk device number"/></div>'); | ||||
|  | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addE2SForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1727,10 +1730,10 @@ function openAddEckd2SystemDialog(hcp) { | ||||
|                 var args = new Array('select[name=system]', 'input[name=devNum]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -1787,7 +1790,7 @@ function openAddPageSpoolDialog(hcp) { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|      | ||||
|     // Create info bar | ||||
| @@ -1805,7 +1808,7 @@ function openAddPageSpoolDialog(hcp) { | ||||
|     diskAttr.append('<div><label>Volume label:</label><input type="text" name="volLabel" value="" maxlength="6" title="The name to be associated with the newly formatted volume"/></div>'); | ||||
|     diskAttr.append('<div><label>Volume use:</label><select name="volUse" title="Specifies that the volume is to be formatted and used as a page or spool volume"><option value="PAGE">Page</option><option value="SPOOL">Spool</option></select></div>'); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addPageSpoolForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1849,10 +1852,10 @@ function openAddPageSpoolDialog(hcp) { | ||||
|                 var args = new Array('select[name=system]', 'input[name=volAddr]', 'input[name=volLabel]', 'select[name=volUse]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -1905,7 +1908,7 @@ function openShareDiskDialog(disks2share) { | ||||
|     var tgtVol = args[1]; | ||||
|      | ||||
|     if (!tgtVol || tgtVol == "undefined") | ||||
|     	tgtVol = ""; | ||||
|         tgtVol = ""; | ||||
|      | ||||
|     // Create info bar | ||||
|     var info = createInfoBar('Indicate a full-pack minidisk is to be shared by the users of many real and virtual systems.'); | ||||
| @@ -1917,7 +1920,7 @@ function openShareDiskDialog(disks2share) { | ||||
|     var shareEnable = $('<div><label>Share enable:</label><select name="shareEnable" title="Turns sharing of the specified full-pack minidisk on or off"><option value="ON">On</option><option value="OFF">Off</option></select></div>'); | ||||
|     shareDiskForm.append(node, volAddr, shareEnable); | ||||
|          | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     shareDiskForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -1961,10 +1964,10 @@ function openShareDiskDialog(disks2share) { | ||||
|                 var args = new Array('input[name=node]', 'input[name=volAddr]', 'select[name=shareEnable]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -2027,7 +2030,7 @@ function openAddScsi2SystemDialog(hcp) { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|          | ||||
|     var devNo = $('<div><label>Device number:</label><input type="text" name="devNo" maxlength="4" title="The SCSI disk device number"/></div>'); | ||||
| @@ -2109,7 +2112,7 @@ function openAddScsi2SystemDialog(hcp) { | ||||
|  | ||||
|         devPathBody.append(devPathRow); | ||||
|          | ||||
|     	// Generate tooltips | ||||
|         // Generate tooltips | ||||
|         addS2SForm.find('div input[title],select[title]').tooltip({ | ||||
|             position: "center right", | ||||
|             offset: [-2, 10], | ||||
| @@ -2138,17 +2141,17 @@ function openAddScsi2SystemDialog(hcp) { | ||||
|     devPathDiv.append(devPathTable); | ||||
|      | ||||
|     var option = $('<div><label>Option:</label><select name="option" title="The action to perform">' + | ||||
|     		'<option selected value="1">Add a new SCSI disk</option>' + | ||||
|     		'<option value="2">Add new paths to an existing SCSI disk</option>' + | ||||
|     		'<option value="3">Delete paths from an existing SCSI disk</option>' + | ||||
|     	'</select></div>'); | ||||
|             '<option selected value="1">Add a new SCSI disk</option>' + | ||||
|             '<option value="2">Add new paths to an existing SCSI disk</option>' + | ||||
|             '<option value="3">Delete paths from an existing SCSI disk</option>' + | ||||
|         '</select></div>'); | ||||
|     var persist = $('<div><label>Persist:</label><select name="persist" title="Specifies that the SCSI device is to be updated on the active system configuration or both the active and permanent system configurations">' + | ||||
|     		'<option selected value="no">No</option>' + | ||||
|     		'<option value="yes">Yes</option>' + | ||||
| 		'</select></div>'); | ||||
|             '<option selected value="no">No</option>' + | ||||
|             '<option value="yes">Yes</option>' + | ||||
|         '</select></div>'); | ||||
|     addS2SForm.append(system, devNo, devPathDiv, option, persist); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addS2SForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -2212,10 +2215,10 @@ function openAddScsi2SystemDialog(hcp) { | ||||
|                 var args = new Array('select[name=system]', 'input[name=devNum]', 'select[name=option]', 'select[name=persist]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -2261,7 +2264,7 @@ function openRemoveScsiDialog(hcp) { | ||||
|     // Create form to add disk | ||||
|     var removeScsiForm = $('<div id="' + dialogId + '" class="form"></div>'); | ||||
|      | ||||
| 	// Obtain mapping for zHCP to zVM system | ||||
|     // Obtain mapping for zHCP to zVM system | ||||
|     var hcp2zvm = new Object(); | ||||
|     hcp2zvm = getHcpZvmHash(); | ||||
|      | ||||
| @@ -2272,7 +2275,7 @@ function openRemoveScsiDialog(hcp) { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|      | ||||
|     // Create info bar | ||||
| @@ -2280,11 +2283,11 @@ function openRemoveScsiDialog(hcp) { | ||||
|     removeScsiForm.append(info, system); | ||||
|     removeScsiForm.append('<div><label>Device number:</label><input type="text" name="devNum" value="" maxlength="4" title="The SCSI disk device number"/></div>'); | ||||
|     removeScsiForm.append('<div><label>Persist:</label><select name="persist" title="Specifies that the SCSI device is to be updated on the active system configuration or both the active and permanent system configurations">' + | ||||
|     		'<option value="NO">No</option>' + | ||||
|     		'<option value="YES>Yes</option>' + | ||||
|     	'</select></div>'); | ||||
|             '<option value="NO">No</option>' + | ||||
|             '<option value="YES>Yes</option>' + | ||||
|         '</select></div>'); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     removeScsiForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -2328,10 +2331,10 @@ function openRemoveScsiDialog(hcp) { | ||||
|                 var args = new Array('select[name=system]', 'input[name=devNum]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -2375,10 +2378,10 @@ function openRemoveScsiDialog(hcp) { | ||||
|  */ | ||||
| function openAddNicDialog(node, hcp) { | ||||
|     // Get network names | ||||
| 	var cookie = $.cookie(hcp + 'networks'); | ||||
|     var cookie = $.cookie(hcp + 'networks'); | ||||
|     var networks = new Array(); | ||||
|     if (cookie) { | ||||
|     	networks = cookie.split(','); | ||||
|         networks = cookie.split(','); | ||||
|     } | ||||
|          | ||||
|     // Create form to add NIC | ||||
| @@ -2512,7 +2515,7 @@ function openAddNicDialog(node, hcp) { | ||||
|         } | ||||
|     }); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addNicForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -2648,7 +2651,7 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|     // Create form to add disk | ||||
|     var addVswitchForm = $('<div id="' + dialogId + '" class="form"></div>'); | ||||
|      | ||||
| 	// Create info bar | ||||
|     // Create info bar | ||||
|     var info = createInfoBar('Create a virtual switch or virtual network LAN.'); | ||||
|      | ||||
|     var netFS = $('<fieldset></fieldset>'); | ||||
| @@ -2666,10 +2669,10 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|      | ||||
|     var networkTypeDiv = $('<div><label>Network Type:</label>'); | ||||
|     var networkType = $('<select name="networkType">' + | ||||
|     		'<option></option>' + | ||||
|     		'<option value="vswitch">vSwitch</option>' + | ||||
|     		'<option value="vlan">VLAN</option>' + | ||||
| 		'</select></div>'); | ||||
|             '<option></option>' + | ||||
|             '<option value="vswitch">vSwitch</option>' + | ||||
|             '<option value="vlan">VLAN</option>' + | ||||
|         '</select></div>'); | ||||
|     networkTypeDiv.append(networkType) | ||||
|     netAttr.append(networkTypeDiv); | ||||
|      | ||||
| @@ -2683,7 +2686,7 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|     hcp2zvm = getHcpZvmHash(); | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|  | ||||
|     var typeAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>'); | ||||
| @@ -2708,38 +2711,38 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|     }); | ||||
|      | ||||
|     advanced.append($('<div><label>Connection:</label><select name="connection" title="The real device connection">' +  | ||||
|     		'<option value="0">Unspecified</option>' + | ||||
|     		'<option value="1">Activate real device connection</option>' + | ||||
|     		'<option value="2">Do not activate real device connection</option>' + | ||||
|     	'</select></div>')); | ||||
|             '<option value="0">Unspecified</option>' + | ||||
|             '<option value="1">Activate real device connection</option>' + | ||||
|             '<option value="2">Do not activate real device connection</option>' + | ||||
|         '</select></div>')); | ||||
|     advanced.append($('<div><label>QDIO buffer size:</label><input type="text" name="queueMemoryLimit" maxlength="1" value="8" title="A number between 1 and 8 specifying the QDIO buffer size in megabytes. If unspecified, the default is 8."/></div>')); | ||||
|     advanced.append($('<div><label>Routing:</label><select name="routingValue" title="Specifies whether the OSA-Express QDIO device will act as a router to the virtual switch">' + | ||||
|     		'<option value="0">Unspecified</option>' + | ||||
|     		'<option value="1">NONROUTER</option>' + | ||||
|     		'<option value="2">PRIROUTER</option>' + | ||||
| 		'</select></div>')); | ||||
|             '<option value="0">Unspecified</option>' + | ||||
|             '<option value="1">NONROUTER</option>' + | ||||
|             '<option value="2">PRIROUTER</option>' + | ||||
|         '</select></div>')); | ||||
|     advanced.append($('<div><label>Transport:</label><select name="transportType" title="Specifies the transport mechanism to be used for the virtual switch">' + | ||||
|     		'<option value="0">Unspecified</option>' + | ||||
|     		'<option value="1">IP</option>' + | ||||
|     		'<option value="2">ETHERNET</option>' + | ||||
| 		'</select></div>')); | ||||
|             '<option value="0">Unspecified</option>' + | ||||
|             '<option value="1">IP</option>' + | ||||
|             '<option value="2">ETHERNET</option>' + | ||||
|         '</select></div>')); | ||||
|     advanced.append($('<div><label>VLAN ID:</label><input type="text" name="vlanId" value="-1" title="Specifies the VLAN ID"/></div>')); | ||||
|     advanced.append($('<div><label>Port type:</label><select name="portType" title="Specifies the port type">' + | ||||
|     		'<option value="0">Unspecified</option>' + | ||||
|     		'<option value="1">ACCESS</option>' + | ||||
|     		'<option value="2">TRUNK</option>' + | ||||
| 		'</select></div>')); | ||||
|             '<option value="0">Unspecified</option>' + | ||||
|             '<option value="1">ACCESS</option>' + | ||||
|             '<option value="2">TRUNK</option>' + | ||||
|         '</select></div>')); | ||||
|     advanced.append($('<div><label>Update sysconfig:</label><select name="updateSysConfig" title="Specifies whether to add the virtual switch definition to the system configuration file">' + | ||||
|     		'<option value="0">Unspecified</option>' + | ||||
|     		'<option value="1">Create virtual switch</option>' + | ||||
|     		'<option value="2">Create virtual switch and add definition to system configuration</option>' + | ||||
|     		'<option value="3">Add virtual switch definition to system configuration</option>' + | ||||
|     	'</select></div>')); | ||||
|             '<option value="0">Unspecified</option>' + | ||||
|             '<option value="1">Create virtual switch</option>' + | ||||
|             '<option value="2">Create virtual switch and add definition to system configuration</option>' + | ||||
|             '<option value="3">Add virtual switch definition to system configuration</option>' + | ||||
|         '</select></div>')); | ||||
|     advanced.append($('<div><label>GVRP:</label><select name="gvrp" title="GVRP will run only on 802.1Q trunk ports and is used primarily to prune traffic from VLANs that does not need to be passed between trunking switches">' + | ||||
|     		'<option value="0">Unspecified</option>' + | ||||
|     		'<option value="1">GVRP</option>' + | ||||
|     		'<option value="2">NOGVRP</option>' + | ||||
| 		'</select></div>')); | ||||
|             '<option value="0">Unspecified</option>' + | ||||
|             '<option value="1">GVRP</option>' + | ||||
|             '<option value="2">NOGVRP</option>' + | ||||
|         '</select></div>')); | ||||
|     advanced.append($('<div><label>Native VLAN ID:</label><input type="text" name="nativeVlanId" value="-1" title="The native VLAN ID"/></div>')); | ||||
|      | ||||
|     // Create VLAN parameters | ||||
| @@ -2763,24 +2766,24 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|     typeAttr.append(vswitchOptions, vlanOptions); | ||||
|            | ||||
|     networkType.change(function() { | ||||
|     	typeFS.show(); | ||||
|         typeFS.show(); | ||||
|         if ($(this).val() == "vswitch") { | ||||
|         	typeFS.find("legend").text("vSwitch"); | ||||
|         	vswitchOptions.show(); | ||||
|         	vlanOptions.hide(); | ||||
|             typeFS.find("legend").text("vSwitch"); | ||||
|             vswitchOptions.show(); | ||||
|             vlanOptions.hide(); | ||||
|         } else if ($(this).val() == "vlan") { | ||||
|         	typeFS.find("legend").text("VLAN"); | ||||
|         	vswitchOptions.hide(); | ||||
|         	vlanOptions.show(); | ||||
|             typeFS.find("legend").text("VLAN"); | ||||
|             vswitchOptions.hide(); | ||||
|             vlanOptions.show(); | ||||
|         } else { | ||||
|         	typeFS.find("legend").text(""); | ||||
|         	vswitchOptions.hide(); | ||||
|         	vlanOptions.hide(); | ||||
|         	typeFS.hide(); | ||||
|             typeFS.find("legend").text(""); | ||||
|             vswitchOptions.hide(); | ||||
|             vlanOptions.hide(); | ||||
|             typeFS.hide(); | ||||
|         }           | ||||
|     }); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addVswitchForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -2837,10 +2840,10 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|                     var args = new Array('select[name=system]', 'input[name=switchName]', 'input[name=deviceAddress]', 'input[name=controllerName]'); | ||||
|                     for (var i in args) { | ||||
|                         if (!$(this).find(args[i]).val()) { | ||||
|                         	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                             $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                             ready = false; | ||||
|                         } else { | ||||
|                         	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                             $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         } | ||||
|                     } | ||||
|                      | ||||
| @@ -2911,10 +2914,10 @@ function openAddVswitchVlanDialog(hcp) { | ||||
|                     var args = new Array('select[name=system]', 'input[name=vlanName]', 'input[name=vlanOwner]', 'select[name=vlanType]', 'select[name=vlanTransport]'); | ||||
|                     for (var i in args) { | ||||
|                         if (!$(this).find(args[i]).val()) { | ||||
|                         	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                             $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                             ready = false; | ||||
|                         } else { | ||||
|                         	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                             $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         } | ||||
|                     } | ||||
|                      | ||||
| @@ -3014,7 +3017,7 @@ function openRemoveVswitchVlanDialog(networkList) { | ||||
|                                     infoMsg = data.rsp; | ||||
|                                 } | ||||
|                                  | ||||
|                             	openDialog("info", infoMsg); | ||||
|                                 openDialog("info", infoMsg); | ||||
|                             } | ||||
|                         }); | ||||
|                     } else if (type.indexOf("LAN") != -1) { | ||||
| @@ -3029,7 +3032,7 @@ function openRemoveVswitchVlanDialog(networkList) { | ||||
|                             }, | ||||
|                              | ||||
|                             success: function(data) { | ||||
|                             	var infoMsg; | ||||
|                                 var infoMsg; | ||||
|  | ||||
|                                 // Create info message | ||||
|                                 if (jQuery.isArray(data.rsp)) { | ||||
| @@ -3041,7 +3044,7 @@ function openRemoveVswitchVlanDialog(networkList) { | ||||
|                                     infoMsg = data.rsp; | ||||
|                                 } | ||||
|                                  | ||||
|                             	openDialog("info", infoMsg); | ||||
|                                 openDialog("info", infoMsg); | ||||
|                             } | ||||
|                         }); | ||||
|                     }    | ||||
| @@ -3234,8 +3237,8 @@ function getDiskPool(data) { | ||||
|             } // End of if | ||||
|         } // End of for | ||||
|     } else { | ||||
|     	// Load empty table | ||||
|     	loadDiskPoolTable(); | ||||
|         // Load empty table | ||||
|         loadDiskPoolTable(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -3321,25 +3324,25 @@ function loadDiskPoolTable(data) { | ||||
|     var hcp2zvm = new Object(); | ||||
|     var args, hcp, pool, stat, tmp; | ||||
|     if (data) { | ||||
| 	    // Do not continue if the call failed | ||||
| 	    if (!data.rsp.length && data.rsp[0].indexOf("Failed") > 0) { | ||||
| 	        return; | ||||
| 	    } | ||||
| 	     | ||||
| 	    // Obtain mapping for zHCP to zVM system	     | ||||
| 	    hcp2zvm = getHcpZvmHash(); | ||||
| 	     | ||||
| 	    args = data.msg.split(';'); | ||||
| 	    hcp = args[0].replace('hcp=', ''); | ||||
| 	    pool = args[1].replace('pool=', ''); | ||||
| 	    stat = args[2].replace('stat=', ''); | ||||
| 	    tmp = data.rsp[0].split(hcp + ': '); | ||||
|         // Do not continue if the call failed | ||||
|         if (!data.rsp.length && data.rsp[0].indexOf("Failed") > 0) { | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         // Obtain mapping for zHCP to zVM system         | ||||
|         hcp2zvm = getHcpZvmHash(); | ||||
|          | ||||
|         args = data.msg.split(';'); | ||||
|         hcp = args[0].replace('hcp=', ''); | ||||
|         pool = args[1].replace('pool=', ''); | ||||
|         stat = args[2].replace('stat=', ''); | ||||
|         tmp = data.rsp[0].split(hcp + ': '); | ||||
|     } else { | ||||
|     	// Provide empty values so the table will be generated | ||||
|     	hcp = ''; | ||||
|     	pool = ''; | ||||
|     	stat = ''; | ||||
|     	tmp = new Array(); | ||||
|         // Provide empty values so the table will be generated | ||||
|         hcp = ''; | ||||
|         pool = ''; | ||||
|         stat = ''; | ||||
|         tmp = new Array(); | ||||
|     } | ||||
|  | ||||
|     // Resource tab ID     | ||||
| @@ -3515,23 +3518,23 @@ function loadZfcpPoolTable(data) { | ||||
|     var hcp2zvm = new Object(); | ||||
|     var args, hcp, pool, tmp; | ||||
|     if (data) { | ||||
| 	    // Do not continue if the call failed | ||||
| 	    if (!data.rsp.length && data.rsp[0].indexOf("Failed") > 0) { | ||||
| 	        return; | ||||
| 	    } | ||||
| 	     | ||||
| 	    // Obtain mapping for zHCP to zVM system	     | ||||
| 	    hcp2zvm = getHcpZvmHash(); | ||||
| 	    	     | ||||
| 	    args = data.msg.split(';'); | ||||
| 	    hcp = args[0].replace('hcp=', ''); | ||||
| 	    pool = args[1].replace('pool=', ''); | ||||
| 	    tmp = data.rsp[0].split(hcp + ': '); | ||||
|         // Do not continue if the call failed | ||||
|         if (!data.rsp.length && data.rsp[0].indexOf("Failed") > 0) { | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         // Obtain mapping for zHCP to zVM system         | ||||
|         hcp2zvm = getHcpZvmHash(); | ||||
|                  | ||||
|         args = data.msg.split(';'); | ||||
|         hcp = args[0].replace('hcp=', ''); | ||||
|         pool = args[1].replace('pool=', ''); | ||||
|         tmp = data.rsp[0].split(hcp + ': '); | ||||
|     } else { | ||||
|     	// Provide empty values so the table will be generated | ||||
|     	hcp = ''; | ||||
|     	pool = '' | ||||
|     	tmp = new Array(); | ||||
|         // Provide empty values so the table will be generated | ||||
|         hcp = ''; | ||||
|         pool = '' | ||||
|         tmp = new Array(); | ||||
|     } | ||||
|  | ||||
|     // Resource tab ID     | ||||
| @@ -3573,7 +3576,7 @@ function loadZfcpPoolTable(data) { | ||||
|  | ||||
|     if (data) { | ||||
|         // Skip index 0 and 1 because it contains nothing | ||||
|     	var key = ""; | ||||
|         var key = ""; | ||||
|         for ( var i = 2; i < tmp.length; i++) { | ||||
|             tmp[i] = jQuery.trim(tmp[i]); | ||||
|             var diskAttrs = tmp[i].split(','); | ||||
| @@ -3671,26 +3674,26 @@ function openRemoveDiskFromPoolDialog(disks2remove) { | ||||
|     var dialogId = 'zvmDeleteDiskFromPool'; | ||||
|     var deleteDiskForm = $('<div id="' + dialogId + '" class="form"></div>'); | ||||
|      | ||||
| 	// Obtain mapping for zHCP to zVM system | ||||
|     // Obtain mapping for zHCP to zVM system | ||||
|     var hcp2zvm = new Object(); | ||||
|     hcp2zvm = getHcpZvmHash(); | ||||
|      | ||||
|     var disks = new Array(); | ||||
|     if (disks2remove.indexOf(',') > -1) | ||||
|     	disks = disks2remove.split(','); | ||||
|         disks = disks2remove.split(','); | ||||
|     else | ||||
|     	disks.push(disks2remove); | ||||
|         disks.push(disks2remove); | ||||
|      | ||||
|     // Pick the last zHCP and pool it finds | ||||
|     var args, tgtHcp = "", tgtPool = "", tgtVol = ""; | ||||
|     for (var i in disks) { | ||||
|     	args = disks[i].split('-'); | ||||
|         args = disks[i].split('-'); | ||||
|         tgtHcp = args[0]; | ||||
|         tgtPool = args[1]; | ||||
|         tgtVol += args[2] + ','; | ||||
|     } | ||||
|      | ||||
| 	// Strip out last comma | ||||
|     // Strip out last comma | ||||
|     tgtVol = tgtVol.slice(0, -1); | ||||
|          | ||||
|     // Create info bar | ||||
| @@ -3718,7 +3721,7 @@ function openRemoveDiskFromPoolDialog(disks2remove) { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|     systemSelect.val(tgtHcp); | ||||
|              | ||||
| @@ -3736,7 +3739,7 @@ function openRemoveDiskFromPoolDialog(disks2remove) { | ||||
|         }         | ||||
|     }); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     deleteDiskForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -3781,10 +3784,10 @@ function openRemoveDiskFromPoolDialog(disks2remove) { | ||||
|                 var args = new Array('select[name=system]', 'select[name=action]', 'input[name=region]', 'input[name=group]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -3860,10 +3863,10 @@ function openAddDisk2PoolDialog() { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addDiskForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -3908,10 +3911,10 @@ function openAddDisk2PoolDialog() { | ||||
|                 var args = new Array('select[name=system]', 'select[name=action]', 'input[name=volume]', 'input[name=group]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -4005,11 +4008,11 @@ function openRemoveZfcpFromPoolDialog(devices2remove) { | ||||
|     // Append options for hardware control points | ||||
|     systemSelect.append($('<option value=""></option>')); | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|     systemSelect.val(tgtHcp); | ||||
|  | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     deleteDiskForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -4053,10 +4056,10 @@ function openRemoveZfcpFromPoolDialog(devices2remove) { | ||||
|                 var args = new Array('select[name=system]', 'input[name=zfcpPool]', 'input[name=zfcpUnitNo]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -4074,7 +4077,7 @@ function openRemoveZfcpFromPoolDialog(devices2remove) { | ||||
|                  | ||||
|                 var args = '--removezfcpfrompool;' + pool + ';' + unitNo; | ||||
|                 if (portName) { | ||||
|                 	args += ';' + portName; | ||||
|                     args += ';' + portName; | ||||
|                 } | ||||
|                 $.ajax({ | ||||
|                     url : 'lib/cmd.php', | ||||
| @@ -4130,10 +4133,10 @@ function openAddZfcp2PoolDialog() { | ||||
|     systemSelect.append($('<option value=""></option>'));     | ||||
|     // Append options for hardware control points | ||||
|     for (var hcp in hcp2zvm) { | ||||
|     	systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|         systemSelect.append($('<option value="' + hcp2zvm[hcp] + '">' + hcp2zvm[hcp] + '</option>')); | ||||
|     } | ||||
|          | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     addDiskForm.find('div input[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -4186,10 +4189,10 @@ function openAddZfcp2PoolDialog() { | ||||
|                 var args = new Array('select[name=system]', 'input[name=zfcpPool]', 'select[name=zfcpStatus]', 'input[name=zfcpPortName]', 'input[name=zfcpUnitNo]'); | ||||
|                 for (var i in args) { | ||||
|                     if (!$(this).find(args[i]).val()) { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #FF0000 1px'); | ||||
|                         ready = false; | ||||
|                     } else { | ||||
|                     	$(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                         $(this).find(args[i]).css('border', 'solid #BDBDBD 1px'); | ||||
|                     } | ||||
|                 } | ||||
|                  | ||||
| @@ -4205,13 +4208,21 @@ function openAddZfcp2PoolDialog() { | ||||
|                     'Close': function() {$(this).dialog("close");} | ||||
|                 }); | ||||
|                  | ||||
|                 // zFCP range and owner are optional | ||||
|                 var args = '--addzfcp2pool||' + tgtPool + '||' + tgtStatus + '||"' + tgtPortName + '"||' + tgtUnitNo + '||' + tgtSize; | ||||
|                 if (tgtRange) { | ||||
|                 	args += '||' + tgtRange; | ||||
|                 } if (tgtOwner) { | ||||
|                 	args += '||' + tgtOwner; | ||||
|                 } | ||||
|                  | ||||
|                 $.ajax( { | ||||
|                     url : 'lib/cmd.php', | ||||
|                     dataType : 'json', | ||||
|                     data : { | ||||
|                         cmd : 'chhypervisor', | ||||
|                         tgt : tgtSystem, | ||||
|                         args : '--addzfcp2pool||' + tgtPool + '||' + tgtStatus + '||"' + tgtPortName + '"||' + tgtUnitNo + '||' + tgtSize + '||' + tgtRange + '||' + tgtOwner, | ||||
|                         args : args, | ||||
|                         msg : dialogId | ||||
|                     }, | ||||
|  | ||||
| @@ -4326,10 +4337,10 @@ function loadNetworkTable(data) { | ||||
|         zvm = args[0].toLowerCase(); | ||||
|          | ||||
|         if (args[1].indexOf('.') != -1) { | ||||
|         	tmp = args[1].split('.'); | ||||
|         	iHcp = tmp[0]; | ||||
|             tmp = args[1].split('.'); | ||||
|             iHcp = tmp[0]; | ||||
|         } else { | ||||
|         	iHcp = args[1]; | ||||
|             iHcp = args[1]; | ||||
|         } | ||||
|          | ||||
|         hcp2zvm[iHcp] = zvm; | ||||
| @@ -4395,7 +4406,7 @@ function loadNetworkTable(data) { | ||||
|     // Determine the OSI layer | ||||
|     var layer = "3"; | ||||
|     if (details.indexOf("ETHERNET") != -1) { | ||||
|     	layer = "2"; | ||||
|         layer = "2"; | ||||
|     } | ||||
|      | ||||
|     // Find the vSwitch/VLAN owner | ||||
| @@ -4409,7 +4420,7 @@ function loadNetworkTable(data) { | ||||
|     var controllers = ""; | ||||
|     match = ""; | ||||
|     while (match = regex.exec(details)) { | ||||
|     	controllers += match[1] + ","; | ||||
|         controllers += match[1] + ","; | ||||
|     } | ||||
|     controllers = controllers.substring(0, controllers.length - 1);  // Delete last two characters | ||||
|          | ||||
| @@ -5271,11 +5282,11 @@ function createZProvisionNew(inst) { | ||||
|         var thisUserId = $('#' + thisTabId + ' input[name=userId]:visible'); | ||||
|         var pos = thisUserEntry.val().indexOf('USER ' + thisUserId.val().toUpperCase()); | ||||
|         if (pos < 0) { | ||||
|         	 | ||||
|         	pos = thisUserEntry.val().indexOf('IDENTITY ' + thisUserId.val().toUpperCase()); | ||||
|              | ||||
|             pos = thisUserEntry.val().indexOf('IDENTITY ' + thisUserId.val().toUpperCase()); | ||||
|             if (pos < 0) { | ||||
|             	errMsg = errMsg + 'The directory entry does not contain the correct user/identity ID.<br>'; | ||||
|             	ready = false; | ||||
|                 errMsg = errMsg + 'The directory entry does not contain the correct user/identity ID.<br>'; | ||||
|                 ready = false; | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -5713,7 +5724,7 @@ function setGoldenImagesCookies(data) { | ||||
|         var tmp = data.rsp[0].split(","); | ||||
|         for ( var i = 0; i < tmp.length; i++) { | ||||
|             if (tmp[i] != null && tmp[i] != "") { | ||||
|             	copies.push(tmp[i]); | ||||
|                 copies.push(tmp[i]); | ||||
|             } | ||||
|         } | ||||
|          | ||||
| @@ -5764,6 +5775,20 @@ function setZfcpPoolCookies(data) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Set a cookie for zHCP host names | ||||
|  *  | ||||
|  * @param zhcps List of zHCPs known | ||||
|  */ | ||||
| function setzHcpCookies(zhcps) { | ||||
|     if (zhcps.length) { | ||||
|         // Set cookie to expire in 60 minutes | ||||
|         var exDate = new Date(); | ||||
|         exDate.setTime(exDate.getTime() + (240 * 60 * 1000)); | ||||
|         $.cookie('zhcps', zhcps, { expires: exDate }); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Create virtual machine (service page) | ||||
|  *  | ||||
| @@ -5887,7 +5912,7 @@ function configProfilePanel(panelId) { | ||||
|     deleteLnk.click(function() { | ||||
|         var profiles = getNodesChecked(tableId); | ||||
|         if (profiles) { | ||||
|         	deleteProfileDialog(profiles); | ||||
|             deleteProfileDialog(profiles); | ||||
|         } | ||||
|     }); | ||||
|      | ||||
| @@ -6054,7 +6079,7 @@ function profileDialog() { | ||||
|     profileForm.append('<div><label>Disk size (ECKD):</label><input type="text" name="disk_size_eckd" title="The default size of the disk, which can be given as G, M, or number of cylinders."/></div>'); | ||||
|     profileForm.append('<div><label style="vertical-align: top;">Directory entry:</label><textarea name="directory_entry" title="The default directory entry for a node. The default user ID must be set to LXUSR."/></div>'); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     profileForm.find('div input[title],textarea[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -6235,7 +6260,7 @@ function editProfileDialog(profile, pool, size, entry) { | ||||
|     profileForm.find('input[name=disk_size_eckd]').val(size); | ||||
|     profileForm.find('textarea[name=directory_entry]').val(entry); | ||||
|      | ||||
| 	// Generate tooltips | ||||
|     // Generate tooltips | ||||
|     profileForm.find('div input[title],textarea[title],select[title]').tooltip({ | ||||
|         position: "center right", | ||||
|         offset: [-2, 10], | ||||
| @@ -6336,7 +6361,7 @@ function editProfileDialog(profile, pool, size, entry) { | ||||
|  * @returns Hash map containing the zHCP to z/VM system mapping | ||||
|  */ | ||||
| function getHcpZvmHash() { | ||||
| 	// Get zVM host names | ||||
|     // Get zVM host names | ||||
|     if (!$.cookie('zvms')) { | ||||
|         $.ajax({ | ||||
|             url : 'lib/cmd.php', | ||||
| @@ -6363,10 +6388,10 @@ function getHcpZvmHash() { | ||||
|         zvm = args[0].toLowerCase(); | ||||
|          | ||||
|         if (args[1].indexOf('.') != -1) { | ||||
|         	tmp = args[1].split('.'); | ||||
|         	iHcp = tmp[0]; | ||||
|             tmp = args[1].split('.'); | ||||
|             iHcp = tmp[0]; | ||||
|         } else { | ||||
|         	iHcp = args[1]; | ||||
|             iHcp = args[1]; | ||||
|         } | ||||
|          | ||||
|         hcp2zvm[iHcp] = zvm; | ||||
|   | ||||
| @@ -418,31 +418,31 @@ function mkAddNodeLink() { | ||||
|                      | ||||
|                     var plugin; | ||||
|                     switch(mgt) { | ||||
| 	                    case "kvm": | ||||
| 	                        plugin = new kvmPlugin(); | ||||
| 	                        break; | ||||
| 	                    case "esx": | ||||
| 	                        plugin = new esxPlugin(); | ||||
| 	                        break; | ||||
| 	                    case "blade": | ||||
| 	                        plugin = new bladePlugin(); | ||||
| 	                        break; | ||||
| 	                    case "hmc": | ||||
| 	                        plugin = new hmcPlugin(); | ||||
| 	                        break; | ||||
| 	                    case "ipmi": | ||||
| 	                        plugin = new ipmiPlugin(); | ||||
| 	                        break; | ||||
| 	                    case "zvm": | ||||
| 	                        plugin = new zvmPlugin(); | ||||
| 	                        break; | ||||
|                         case "kvm": | ||||
|                             plugin = new kvmPlugin(); | ||||
|                             break; | ||||
|                         case "esx": | ||||
|                             plugin = new esxPlugin(); | ||||
|                             break; | ||||
|                         case "blade": | ||||
|                             plugin = new bladePlugin(); | ||||
|                             break; | ||||
|                         case "hmc": | ||||
|                             plugin = new hmcPlugin(); | ||||
|                             break; | ||||
|                         case "ipmi": | ||||
|                             plugin = new ipmiPlugin(); | ||||
|                             break; | ||||
|                         case "zvm": | ||||
|                             plugin = new zvmPlugin(); | ||||
|                             break; | ||||
|                     } | ||||
|                      | ||||
|                     $(this).dialog('destroy').remove(); | ||||
|                     plugin.addNode(); | ||||
|                 }, | ||||
|                 'Cancel': function(){ | ||||
|                 	$(this).dialog('destroy').remove(); | ||||
|                     $(this).dialog('destroy').remove(); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
| @@ -695,15 +695,15 @@ function loadNodes(data) { | ||||
|             // Create an instance of the plugin | ||||
|             var plugin; | ||||
|             switch(mgt) { | ||||
| 	            case "kvm": | ||||
| 	                plugin = new kvmPlugin(); | ||||
| 	                break; | ||||
| 	            case "esx": | ||||
| 	                plugin = new esxPlugin(); | ||||
| 	                break; | ||||
| 	            case "zvm": | ||||
| 	                plugin = new zvmPlugin(); | ||||
| 	                break; | ||||
|                 case "kvm": | ||||
|                     plugin = new kvmPlugin(); | ||||
|                     break; | ||||
|                 case "esx": | ||||
|                     plugin = new esxPlugin(); | ||||
|                     break; | ||||
|                 case "zvm": | ||||
|                     plugin = new zvmPlugin(); | ||||
|                     break; | ||||
|             } | ||||
|              | ||||
|             plugin.loadClonePage(tgtNodes[i]); | ||||
| @@ -732,7 +732,7 @@ function loadNodes(data) { | ||||
|     var scriptLnk = $('<a>Run script</a>'); | ||||
|     scriptLnk.click(function() { | ||||
|         var tgtNodes = getNodesChecked(nodesTableId); | ||||
|         if (tgtNodes) { | ||||
|         if (tgtNodes) {             | ||||
|             loadScriptPage(tgtNodes); | ||||
|         } | ||||
|     }); | ||||
| @@ -740,21 +740,21 @@ function loadNodes(data) { | ||||
|     // Migrate VM | ||||
|     var migrateLnk = $('<a>Migrate</a>'); | ||||
|     migrateLnk.click(function() { | ||||
|     	var tgtNodes = getNodesChecked(nodesTableId).split(','); | ||||
|     	var mgt = "", tmp = ""; | ||||
|         var tgtNodes = getNodesChecked(nodesTableId).split(','); | ||||
|         var mgt = "", tmp = ""; | ||||
|         for (var i in tgtNodes) { | ||||
|         	tmp = getNodeAttr(tgtNodes[i], 'mgt'); | ||||
|             tmp = getNodeAttr(tgtNodes[i], 'mgt'); | ||||
|             if (!mgt) { | ||||
|             	mgt = tmp | ||||
|                 mgt = tmp | ||||
|             } else { | ||||
|             	if (tmp != mgt) { | ||||
|             		openDialog('warn', "You can pick only one type (mgt) of node to migrate!"); | ||||
|             		return; | ||||
|             	} | ||||
|                 if (tmp != mgt) { | ||||
|                     openDialog('warn', "You can pick only one type (mgt) of node to migrate!"); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
| 	    // Create an instance of the plugin | ||||
|         // Create an instance of the plugin | ||||
|         var plugin; | ||||
|         switch(mgt) { | ||||
|             // Only hypervisors support migration | ||||
| @@ -855,24 +855,24 @@ function loadNodes(data) { | ||||
|             // Create an instance of the plugin | ||||
|             var plugin; | ||||
|             switch(mgt) { | ||||
| 	            case "kvm": | ||||
| 	                plugin = new kvmPlugin(); | ||||
| 	                break; | ||||
| 	            case "esx": | ||||
| 	                plugin = new esxPlugin(); | ||||
| 	                break; | ||||
| 	            case "blade": | ||||
| 	                plugin = new bladePlugin(); | ||||
| 	                break; | ||||
| 	            case "hmc": | ||||
| 	                plugin = new hmcPlugin(); | ||||
| 	                break; | ||||
| 	            case "ipmi": | ||||
| 	                plugin = new ipmiPlugin(); | ||||
| 	                break; | ||||
| 	            case "zvm": | ||||
| 	                plugin = new zvmPlugin(); | ||||
| 	                break; | ||||
|                 case "kvm": | ||||
|                     plugin = new kvmPlugin(); | ||||
|                     break; | ||||
|                 case "esx": | ||||
|                     plugin = new esxPlugin(); | ||||
|                     break; | ||||
|                 case "blade": | ||||
|                     plugin = new bladePlugin(); | ||||
|                     break; | ||||
|                 case "hmc": | ||||
|                     plugin = new hmcPlugin(); | ||||
|                     break; | ||||
|                 case "ipmi": | ||||
|                     plugin = new ipmiPlugin(); | ||||
|                     break; | ||||
|                 case "zvm": | ||||
|                     plugin = new zvmPlugin(); | ||||
|                     break; | ||||
|             } | ||||
|              | ||||
|             plugin.loadLogPage(tgtNodes[i]); | ||||
| @@ -1636,24 +1636,24 @@ function loadNode(e) { | ||||
|     // Create an instance of the plugin | ||||
|     var plugin; | ||||
|     switch(mgt) { | ||||
| 	    case "kvm": | ||||
| 	        plugin = new kvmPlugin(); | ||||
| 	        break; | ||||
| 	    case "esx": | ||||
| 	        plugin = new esxPlugin(); | ||||
| 	        break; | ||||
| 	    case "blade": | ||||
| 	        plugin = new bladePlugin(); | ||||
| 	        break; | ||||
| 	    case "hmc": | ||||
| 	        plugin = new hmcPlugin(); | ||||
| 	        break; | ||||
| 	    case "ipmi": | ||||
| 	        plugin = new ipmiPlugin(); | ||||
| 	        break; | ||||
| 	    case "zvm": | ||||
| 	        plugin = new zvmPlugin(); | ||||
| 	        break; | ||||
|         case "kvm": | ||||
|             plugin = new kvmPlugin(); | ||||
|             break; | ||||
|         case "esx": | ||||
|             plugin = new esxPlugin(); | ||||
|             break; | ||||
|         case "blade": | ||||
|             plugin = new bladePlugin(); | ||||
|             break; | ||||
|         case "hmc": | ||||
|             plugin = new hmcPlugin(); | ||||
|             break; | ||||
|         case "ipmi": | ||||
|             plugin = new ipmiPlugin(); | ||||
|             break; | ||||
|         case "zvm": | ||||
|             plugin = new zvmPlugin(); | ||||
|             break; | ||||
|     } | ||||
|  | ||||
|     // Get tab area where a new tab will be inserted | ||||
| @@ -1758,13 +1758,13 @@ function loadUnlockPage(tgtNodes) { | ||||
|      */ | ||||
|     var unlockBtn = createButton('Unlock'); | ||||
|     unlockBtn.css({ | ||||
|     	'width': '80px', | ||||
|     	'display': 'block' | ||||
|         'width': '80px', | ||||
|         'display': 'block' | ||||
|     }); | ||||
|     unlockBtn.click(function() { | ||||
|     	// Remove any warning messages | ||||
|     	$(this).parents('.ui-tabs-panel').find('.ui-state-error').remove(); | ||||
|     	 | ||||
|         // Remove any warning messages | ||||
|         $(this).parents('.ui-tabs-panel').find('.ui-state-error').remove(); | ||||
|          | ||||
|         // If a password is given | ||||
|         var password = $('#' + newTabId + ' input[name=password]').css('border', 'solid #BDBDBD 1px'); | ||||
|         if (password.val()) { | ||||
| @@ -1822,7 +1822,7 @@ function loadScriptPage(tgtNodes) { | ||||
|     // Create remote script form | ||||
|     var scriptForm = $('<div class="form"></div>'); | ||||
|      | ||||
| 	// Create status bar | ||||
|     // Create status bar | ||||
|     var barId = 'scriptStatusBar' + inst; | ||||
|     var statBar = createStatusBar(barId); | ||||
|     statBar.hide(); | ||||
| @@ -1896,12 +1896,12 @@ function loadScriptPage(tgtNodes) { | ||||
|      */ | ||||
|     var runBtn = createButton('Run'); | ||||
|     runBtn.css({ | ||||
|     	'width': '80px' | ||||
|         'width': '80px' | ||||
|     }); | ||||
|     runBtn.click(function() {  | ||||
|     	// Remove any warning messages | ||||
|     	$(this).parents('.ui-tabs-panel').find('.ui-state-error').remove(); | ||||
|     	 | ||||
|         // Remove any warning messages | ||||
|         $(this).parents('.ui-tabs-panel').find('.ui-state-error').remove(); | ||||
|          | ||||
|         // Get script to run | ||||
|         var textarea = $('#' + newTabId + ' textarea').css('border', 'solid #BDBDBD 1px'); | ||||
|          | ||||
| @@ -2010,7 +2010,7 @@ function loadDeletePage(tgtNodes) { | ||||
|     // Create delete form | ||||
|     var deleteForm = $('<div class="form"></div>'); | ||||
|      | ||||
| 	// Create status bar, hide on load | ||||
|     // Create status bar, hide on load | ||||
|     var statBarId = 'deleteStatusBar' + inst; | ||||
|     var statBar = createStatusBar(statBarId).hide(); | ||||
|  | ||||
| @@ -2041,12 +2041,12 @@ function loadDeletePage(tgtNodes) { | ||||
|      */ | ||||
|     var deleteBtn = createButton('Delete'); | ||||
|     deleteBtn.click(function() { | ||||
|     	var cmd = "rmvm"; | ||||
|     	// Only delete entries in database if checked | ||||
|     	if ($("#" + newTabId + " input[name='db-only']").attr('checked')) { | ||||
|     		cmd = "noderm"; | ||||
|     	} | ||||
|     	 | ||||
|         var cmd = "rmvm"; | ||||
|         // Only delete entries in database if checked | ||||
|         if ($("#" + newTabId + " input[name='db-only']").attr('checked')) { | ||||
|             cmd = "noderm"; | ||||
|         } | ||||
|          | ||||
|         // Delete the virtual server | ||||
|         $.ajax( { | ||||
|             url : 'lib/cmd.php', | ||||
| @@ -2164,7 +2164,7 @@ function updateStatusBar(data) { | ||||
|  */ | ||||
| function updatePowerStatus(data) { | ||||
|     // Hide power loader | ||||
| 	var powerCol = $('#' + nodesTableId + '_wrapper .dataTables_scrollHead .datatable thead tr th:eq(3)'); | ||||
|     var powerCol = $('#' + nodesTableId + '_wrapper .dataTables_scrollHead .datatable thead tr th:eq(3)'); | ||||
|     powerCol.find('img').hide(); | ||||
|  | ||||
|     // Get datatable | ||||
| @@ -2218,8 +2218,8 @@ function runScript(inst) { | ||||
|      | ||||
|     var statBarId = 'scriptStatusBar' + inst; | ||||
|     $('#' + statBarId).show();                    // Show status bar | ||||
|     $('#' + statBarId + ' img').show();            // Show loader | ||||
|     $('#' + statBarId + ' p').remove();            // Clear status bar | ||||
|     $('#' + statBarId + ' img').show();           // Show loader | ||||
|     $('#' + statBarId + ' p').remove();           // Clear status bar | ||||
|  | ||||
|     // Disable all fields | ||||
|     $('#' + tabId + ' input').attr('disabled', 'true'); | ||||
| @@ -3250,14 +3250,16 @@ function advancedLoad(group){ | ||||
|     } | ||||
|  | ||||
|     var args; | ||||
|     var shortzHcps = new Array(); | ||||
|     for (var h in hcps) { | ||||
|         // Get node without domain name | ||||
|         args = h.split('.'); | ||||
|         shortzHcps.push(args[0]); | ||||
|          | ||||
|         // If there are no disk pools or network names cookie for this hcp | ||||
|         if (!$.cookie(args[0] + 'diskpools') || !$.cookie(args[0] + 'networks')) { | ||||
|             // Check if SMAPI is online | ||||
|             $.ajax( { | ||||
|             $.ajax({ | ||||
|                 url : 'lib/cmd.php', | ||||
|                 dataType : 'json', | ||||
|                 data : { | ||||
| @@ -3270,10 +3272,13 @@ function advancedLoad(group){ | ||||
|                 // Load hardware control point specific info | ||||
|                 // Get disk pools and network names | ||||
|                 success : loadHcpInfo | ||||
|             });      | ||||
|             }); | ||||
|         } | ||||
|     } // End of for | ||||
|      | ||||
|     // Save zHCPs as a cookie | ||||
|     setzHcpCookies(shortzHcps); | ||||
|      | ||||
|     // Retrieve z/VM hypervisors and their zHCPs | ||||
|     if (!$.cookie('zvms')) { | ||||
|         $.ajax( { | ||||
|   | ||||
| @@ -536,7 +536,7 @@ function loadNodesTable(data) { | ||||
|         } | ||||
|     }); | ||||
|      | ||||
|     // Power softoff | ||||
| 	// Power softoff | ||||
|     var powerSoftoffLnk = $('<a>Shutdown</a>'); | ||||
|     powerSoftoffLnk.click(function() { | ||||
|         var tgtNodes = getNodesChecked(nodesDTId); | ||||
|   | ||||
| @@ -419,7 +419,7 @@ sub web_unlock { | ||||
|     my $password = $request->{arg}->[2]; | ||||
|  | ||||
|     # Unlock a node by setting up the SSH keys | ||||
|     my $out = `DSH_REMOTE_PASSWORD=$password xdsh $node -K`; | ||||
|     my $out = `DSH_REMOTE_PASSWORD=$password /opt/xcat/bin/xdsh $node -K`; | ||||
|  | ||||
|     $callback->( { data => $out } ); | ||||
| } | ||||
| @@ -429,7 +429,7 @@ sub web_gangliastatus { | ||||
|  | ||||
|     # Get node range | ||||
|     my $nr  = $request->{arg}->[1]; | ||||
|     my $out = `xdsh $nr "service gmond status"`; | ||||
|     my $out = `/opt/xcat/bin/xdsh $nr "service gmond status"`; | ||||
|  | ||||
|     # Parse output, and use $callback to send back to the web interface | ||||
|     # Output looks like: | ||||
| @@ -466,21 +466,21 @@ sub web_gangliaconf() { | ||||
|     my $output; | ||||
|  | ||||
|     # Add gangliamon to the monitoring table (if not already) | ||||
|     $output = `monadd gangliamon`; | ||||
|     $output = `/opt/xcat/bin/monadd gangliamon`; | ||||
|  | ||||
|     # Run the ganglia configuration script on node | ||||
|     if ($nr) { | ||||
|         $output = `moncfg gangliamon $nr -r`; | ||||
|         $output = `/opt/xcat/bin/moncfg gangliamon $nr -r`; | ||||
|     } | ||||
|     else { | ||||
|  | ||||
|         # If no node range is given, then assume all nodes | ||||
|  | ||||
|         # Handle localhost (this needs to be 1st) | ||||
|         $output = `moncfg gangliamon`; | ||||
|         $output = `/opt/xcat/bin/moncfg gangliamon`; | ||||
|  | ||||
|         # Handle remote nodes | ||||
|         $output .= `moncfg gangliamon -r`; | ||||
|         $output .= `/opt/xcat/bin/moncfg gangliamon -r`; | ||||
|     } | ||||
|  | ||||
|     my @lines = split( '\n', $output ); | ||||
| @@ -504,28 +504,28 @@ sub web_gangliastart() { | ||||
|     my $output; | ||||
|  | ||||
|     # Add gangliamon to the monitoring table (if not already) | ||||
|     $output = `monadd gangliamon`; | ||||
|     $output = `/opt/xcat/bin/monadd gangliamon`; | ||||
|  | ||||
|     # Start the gmond daemon on node | ||||
|     if ($nr) { | ||||
|         $output = `moncfg gangliamon $nr -r`; | ||||
|         $output .= `monstart gangliamon $nr -r`; | ||||
|         $output = `/opt/xcat/bin/moncfg gangliamon $nr -r`; | ||||
|         $output .= `/opt/xcat/bin/monstart gangliamon $nr -r`; | ||||
|     } | ||||
|     else { | ||||
|  | ||||
|         # If no node range is given, then assume all nodes | ||||
|  | ||||
|         # Handle localhost (this needs to be 1st) | ||||
|         $output = `moncfg gangliamon`; | ||||
|         $output = `/opt/xcat/bin/moncfg gangliamon`; | ||||
|  | ||||
|         # Handle remote nodes | ||||
|         $output .= `moncfg gangliamon -r`; | ||||
|         $output .= `/opt/xcat/bin/moncfg gangliamon -r`; | ||||
|  | ||||
|         # Handle localhost (this needs to be 1st) | ||||
|         $output .= `monstart gangliamon`; | ||||
|         $output .= `/opt/xcat/bin/monstart gangliamon`; | ||||
|  | ||||
|         # Handle remote nodes | ||||
|         $output .= `monstart gangliamon -r`; | ||||
|         $output .= `/opt/xcat/bin/monstart gangliamon -r`; | ||||
|     } | ||||
|  | ||||
|     my @lines = split( '\n', $output ); | ||||
| @@ -550,17 +550,17 @@ sub web_gangliastop() { | ||||
|  | ||||
|     # Stop the gmond daemon on node | ||||
|     if ($nr) { | ||||
|         $output = `monstop gangliamon $nr -r`; | ||||
|         $output = `/opt/xcat/bin/monstop gangliamon $nr -r`; | ||||
|     } | ||||
|     else { | ||||
|  | ||||
|         # If no node range is given, then assume all nodes | ||||
|  | ||||
|         # Handle localhost (this needs to be 1st) | ||||
|         $output = `monstop gangliamon`; | ||||
|         $output = `/opt/xcat/bin/monstop gangliamon`; | ||||
|  | ||||
|         # Handle remote nodes | ||||
|         $output .= `monstop gangliamon -r`; | ||||
|         $output .= `/opt/xcat/bin/monstop gangliamon -r`; | ||||
|     } | ||||
|  | ||||
|     my @lines = split( '\n', $output ); | ||||
| @@ -585,7 +585,7 @@ sub web_gangliacheck() { | ||||
|  | ||||
|     # Check if ganglia RPMs are installed | ||||
|     my $info; | ||||
|     my $info = `xdsh $nr "rpm -q ganglia-gmond libganglia libconfuse"`; | ||||
|     my $info = `/opt/xcat/bin/xdsh $nr "rpm -q ganglia-gmond libganglia libconfuse"`; | ||||
|     $callback->( { info => $info } ); | ||||
|     return; | ||||
| } | ||||
| @@ -686,7 +686,7 @@ sub web_installganglia() { | ||||
|  | ||||
|         # Install Ganglia RPMs using updatenode | ||||
|         $callback->( { info => "$_: Installing Ganglia..." } ); | ||||
|         $info = `updatenode $_ -S`; | ||||
|         $info = `/opt/xcat/bin/updatenode $_ -S`; | ||||
|         $callback->( { info => "$info" } ); | ||||
|     } | ||||
|  | ||||
| @@ -2032,9 +2032,9 @@ sub web_addnode { | ||||
|         } | ||||
|          | ||||
|         if ( 'hmc' eq $nodetype ) { | ||||
|             `chdef -t node -o $hcpname username=$username password=$passwd mgt=hmc nodetype=$nodetype ip=$ip groups=all`; | ||||
|             `/opt/xcat/bin/chdef -t node -o $hcpname username=$username password=$passwd mgt=hmc nodetype=$nodetype ip=$ip groups=all`; | ||||
|         } else { | ||||
|             `chdef -t node -o $hcpname username=$username password=$passwd mgt=blade mpa=$hcpname nodetype=$nodetype id=0 groups=mm,all`; | ||||
|             `/opt/xcat/bin/chdef -t node -o $hcpname username=$username password=$passwd mgt=blade mpa=$hcpname nodetype=$nodetype id=0 groups=mm,all`; | ||||
|         } | ||||
|         return; | ||||
|     } | ||||
| @@ -2052,7 +2052,7 @@ sub web_addnode { | ||||
|         $temphash{ $tempArray[$i] } = $tempArray[ $i + 1 ]; | ||||
|     } | ||||
|      | ||||
|     `rscan $hcpname -z > /tmp/rscanall.tmp`; | ||||
|     `/opt/xcat/bin/rscan $hcpname -z > /tmp/rscanall.tmp`; | ||||
|  | ||||
|     unless ( -e '/tmp/rscanall.tmp' ) { | ||||
|         return; | ||||
| @@ -2292,7 +2292,7 @@ sub web_passwd() { | ||||
|     my $encrypted = `perl -e "print crypt($password, $random)"`; | ||||
|  | ||||
|     # Save in xCAT passwd table | ||||
|     `chtab username=$user passwd.key=xcat passwd.password=$encrypted`; | ||||
|     `/opt/xcat/sbin/chtab username=$user passwd.key=xcat passwd.password=$encrypted`; | ||||
|  | ||||
|     my $info = "User password successfully updated"; | ||||
|     $callback->( { info => $info } ); | ||||
| @@ -2307,7 +2307,7 @@ sub web_policy() { | ||||
|     my $args = $request->{arg}->[2]; | ||||
|  | ||||
|     # Save in xCAT passwd and policy tables | ||||
|     my $out = `chtab priority=$priority $args`; | ||||
|     my $out = `/opt/xcat/sbin/chtab priority=$priority $args`; | ||||
|  | ||||
|     my $info = "User policy successfully updated"; | ||||
|     $callback->( { info => $info } ); | ||||
| @@ -2323,8 +2323,8 @@ sub web_deleteuser() { | ||||
|  | ||||
|     # Delete user from xCAT passwd and policy tables | ||||
|     foreach (@users) { | ||||
|         `chtab -d username=$_ passwd`; | ||||
|         `chtab -d name=$_ policy`; | ||||
|         `/opt/xcat/sbin/chtab -d username=$_ passwd`; | ||||
|         `/opt/xcat/sbin/chtab -d name=$_ policy`; | ||||
|     } | ||||
|  | ||||
|     my $info = "User successfully deleted"; | ||||
| @@ -2467,8 +2467,8 @@ sub web_updateosimage() { | ||||
|     my $provMethod = $request->{arg}->[7]; | ||||
|     my $comments   = $request->{arg}->[8]; | ||||
|  | ||||
|     `chtab -d imagename=$name osimage`; | ||||
|     `chtab osimage.imagename=$name osimage.imagetype=$type osimage.osarch=$arch osimage.osname=$osName osimage.osvers=$osVersion osimage.profile=$profile osimage.provmethod=$provMethod osimage.comments=$comments`; | ||||
|     `/opt/xcat/sbin/chtab -d imagename=$name osimage`; | ||||
|     `/opt/xcat/sbin/chtab osimage.imagename=$name osimage.imagetype=$type osimage.osarch=$arch osimage.osname=$osName osimage.osvers=$osVersion osimage.profile=$profile osimage.provmethod=$provMethod osimage.comments=$comments`; | ||||
|     my $info = "Image successfully updated"; | ||||
|     $callback->( { info => $info } ); | ||||
| } | ||||
| @@ -2483,7 +2483,7 @@ sub web_rmosimage() { | ||||
|  | ||||
|     # Delete user from xCAT passwd and policy tables | ||||
|     foreach (@names) { | ||||
|         `chtab -d imagename=$_ osimage`; | ||||
|         `/opt/xcat/sbin/chtab -d imagename=$_ osimage`; | ||||
|     } | ||||
|  | ||||
|     my $info = "Image successfully deleted"; | ||||
| @@ -2505,8 +2505,8 @@ sub web_updategroup() { | ||||
|     my $comments = $request->{arg}->[4]; | ||||
|     $comments =~ s/'//g; | ||||
|  | ||||
|     `chtab -d node=$name hosts`; | ||||
| `chtab node=$name hosts.ip="$ip" hosts.hostnames="$hostnames" hosts.comments="$comments"`; | ||||
|     `/opt/xcat/sbin/chtab -d node=$name hosts`; | ||||
|     `/opt/xcat/sbin/chtab node=$name hosts.ip="$ip" hosts.hostnames="$hostnames" hosts.comments="$comments"`; | ||||
|  | ||||
|     my $info = "Group successfully updated"; | ||||
|     $callback->( { info => $info } ); | ||||
| @@ -2522,7 +2522,7 @@ sub web_rmgroup() { | ||||
|  | ||||
|     # Delete user from xCAT passwd and policy tables | ||||
|     foreach (@names) { | ||||
|         `chtab -d node=$_ hosts`; | ||||
|         `/opt/xcat/sbin/chtab -d node=$_ hosts`; | ||||
|         `rm -rf /var/opt/xcat/ippool/$_.pool`; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -105,11 +105,11 @@ sub provzlinux { | ||||
|     } | ||||
|      | ||||
|     # Check the max # of virtual machines allowed | ||||
|     my $out = `tabdump nodetype -w nodetype.comments=~"owner:$owner"`; | ||||
|     my $out = `/opt/xcat/sbin/tabdump nodetype -w nodetype.comments=~"owner:$owner"`; | ||||
|     my @tmp = split( /\n/, $out ); | ||||
|     my $usrVM = scalar(@tmp) - 1; | ||||
|      | ||||
|     $out = `webportal getmaxvm $owner`; | ||||
|     $out = `/opt/xcat/bin/webportal getmaxvm $owner`; | ||||
|     $out =~ s/Max allowed: //g; | ||||
|     my $maxVM = int($out); | ||||
|      | ||||
| @@ -230,15 +230,15 @@ sub provzlinux { | ||||
|     # Set node definitions | ||||
|     # Also put node into all group | ||||
|     if ($group eq 'all') { | ||||
|         $out = `mkdef -t node -o $node userid=$userid hcp=$hcp mgt=zvm groups=$group`; | ||||
|         $out = `/opt/xcat/bin/mkdef -t node -o $node userid=$userid hcp=$hcp mgt=zvm groups=$group`; | ||||
|     } else { | ||||
|         # Put node in all group | ||||
|         $out = `mkdef -t node -o $node userid=$userid hcp=$hcp mgt=zvm groups=$group`; | ||||
|         $out = `/opt/xcat/bin/mkdef -t node -o $node userid=$userid hcp=$hcp mgt=zvm groups=$group`; | ||||
|     }     | ||||
|     println( $callback, "$out" ); | ||||
|      | ||||
|     # Set nodetype definitions | ||||
|     $out = `chtab node=$node hosts.ip=$ip hosts.hostnames=$hostname noderes.netboot=zvm nodetype.nodetype=osi nodetype.provmethod=install nodetype.os=$os nodetype.arch=$arch nodetype.profile=$profile nodetype.comments="owner:$owner"`; | ||||
|     $out = `/opt/xcat/sbin/chtab node=$node hosts.ip=$ip hosts.hostnames=$hostname noderes.netboot=zvm nodetype.nodetype=osi nodetype.provmethod=install nodetype.os=$os nodetype.arch=$arch nodetype.profile=$profile nodetype.comments="owner:$owner"`; | ||||
|  | ||||
|     # Create user directory entry replacing LXUSR with user ID | ||||
|     # Use /opt/zhcp/conf/default.direct on zHCP as the template | ||||
| @@ -246,7 +246,7 @@ sub provzlinux { | ||||
|     #    INCLUDE LNXDFLT | ||||
|     #    COMMAND SET VSWITCH VSW2 GRANT LXUSR | ||||
|     $out = `sed $default_direct -e s/LXUSR/$userid/g > /tmp/$node-direct.txt`; | ||||
|     $out = `mkvm $node /tmp/$node-direct.txt`; | ||||
|     $out = `/opt/xcat/bin/mkvm $node /tmp/$node-direct.txt`; | ||||
|     `rm -rf /tmp/$node-direct.txt`; | ||||
|     println( $callback, "$out" ); | ||||
|     if ( $out =~ m/Error/i ) { | ||||
| @@ -286,7 +286,7 @@ sub provzlinux { | ||||
|             foreach (@$type) { | ||||
|                 # Add ECKD disk | ||||
|                 if ( $_ =~ m/dasd_eckd_mod/i ) { | ||||
|                     $out = `chvm $node --add3390 $disk_pool $virt_addr $eckd_size MR`; | ||||
|                     $out = `/opt/xcat/bin/chvm $node --add3390 $disk_pool $virt_addr $eckd_size MR`; | ||||
|                     println( $callback, "$out" ); | ||||
|                     if ( $out =~ m/Error/i ) { | ||||
|                         return; | ||||
| @@ -317,7 +317,7 @@ sub provzlinux { | ||||
|          | ||||
|         # Add ECKD disk for each device found | ||||
|         for $dev ( keys %devices ) { | ||||
|             $out = `chvm $node --add3390 $disk_pool $virt_addr $eckd_size MR`; | ||||
|             $out = `/opt/xcat/bin/chvm $node --add3390 $disk_pool $virt_addr $eckd_size MR`; | ||||
|             println( $callback, "$out" ); | ||||
|             if ( $out =~ m/Error/i ) { | ||||
|                 return; | ||||
| @@ -328,36 +328,35 @@ sub provzlinux { | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     # Update hosts table and DNS | ||||
|     `makehosts`; | ||||
|     `makedns`; | ||||
|     # Update hosts table | ||||
|     `/opt/xcat/sbin/makehosts`; | ||||
|  | ||||
|     # Update DHCP | ||||
|     `makedhcp -a`; | ||||
|  | ||||
|     # Toggle node power so COMMAND SET will get executed | ||||
|     `rpower $node on`; | ||||
|     `rpower $node off`; | ||||
|     `/opt/xcat/bin/rpower $node on`; | ||||
|     `/opt/xcat/bin/rpower $node off`; | ||||
|  | ||||
|     # Punch kernel, initrd, and ramdisk to node reader | ||||
|     $out = `nodeset $node install`; | ||||
|     $out = `/opt/xcat/sbin/nodeset $node install`; | ||||
|     println( $callback, "$out" ); | ||||
|     if ( $out =~ m/Error/i ) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     # IPL reader and begin installation | ||||
|     $out = `rnetboot $node ipl=00C`; | ||||
|     $out = `/opt/xcat/bin/rnetboot $node ipl=00C`; | ||||
|     println( $callback, "$out" ); | ||||
|     if ( $out =~ m/Error/i ) { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     # Configure Ganglia monitoring | ||||
|     $out = `moncfg gangliamon $node -r`; | ||||
|     $out = `/opt/xcat/bin/moncfg gangliamon $node -r`; | ||||
|      | ||||
|     # Show node information, e.g. IP, hostname, and root password | ||||
|     $out = `lsdef $node -i ip,hostnames | egrep "ip=|hostnames="`; | ||||
|     $out = `/opt/xcat/bin/lsdef $node -i ip,hostnames | egrep "ip=|hostnames="`; | ||||
|     my $rootpw = getsysrootpw(); | ||||
|     println( $callback, "Your virtual machine is ready. It may take a few minutes before you can logon using VNC ($node:1). Below is your VM attributes." ); | ||||
|     println( $callback, "$out" ); | ||||
| @@ -569,7 +568,7 @@ sub gennodename { | ||||
|     } | ||||
|                  | ||||
|     # Check xCAT tables, /etc/hosts, and ping to see if hostname is already used | ||||
|     while (`nodels $hostname` || `cat /etc/hosts | grep "$ipaddr "` || !(`ping -c 4 $ipaddr` =~ m/100% packet loss/)) {         | ||||
|     while (`/opt/xcat/bin/nodels $hostname` || `cat /etc/hosts | grep "$ipaddr "` || !(`ping -c 4 $ipaddr` =~ m/100% packet loss/)) {         | ||||
|         # Base digit invalid if over 254 | ||||
|         if ($base_digit > $range_high) { | ||||
|             last; | ||||
| @@ -603,11 +602,11 @@ sub clonezlinux { | ||||
|     my $owner = $request->{arg}->[3]; | ||||
|      | ||||
|     # Check the max # of virtual machines allowed | ||||
|     my $out = `tabdump nodetype -w nodetype.comments=~"owner:$owner"`; | ||||
|     my $out = `/opt/xcat/sbin/tabdump nodetype -w nodetype.comments=~"owner:$owner"`; | ||||
|     my @tmp = split( /\n/, $out ); | ||||
|     my $usrVM = scalar(@tmp) - 1; | ||||
|      | ||||
|     $out = `webportal getmaxvm $owner`; | ||||
|     $out = `/opt/xcat/bin/webportal getmaxvm $owner`; | ||||
|     $out =~ s/Max allowed: //g; | ||||
|     my $maxVM = int($out); | ||||
|      | ||||
| @@ -688,34 +687,34 @@ sub clonezlinux { | ||||
|     my $userid = $node; | ||||
|          | ||||
|     # Set node definitions | ||||
|     $out = `mkdef -t node -o $node userid=$userid hcp=$hcp mgt=zvm groups=$group`; | ||||
|     $out = `/opt/xcat/bin/mkdef -t node -o $node userid=$userid hcp=$hcp mgt=zvm groups=$group`; | ||||
|     println( $callback, "$out" ); | ||||
|  | ||||
|     # Set nodetype definitions | ||||
|     $out = `chtab node=$node hosts.ip=$ip hosts.hostnames=$hostname noderes.netboot=zvm nodetype.nodetype=osi nodetype.provmethod=install nodetype.os=$os nodetype.arch=$arch nodetype.profile=$profile nodetype.comments="owner:$owner"`; | ||||
|     $out = `/opt/xcat/sbin/chtab node=$node hosts.ip=$ip hosts.hostnames=$hostname noderes.netboot=zvm nodetype.nodetype=osi nodetype.provmethod=install nodetype.os=$os nodetype.arch=$arch nodetype.profile=$profile nodetype.comments="owner:$owner"`; | ||||
|  | ||||
|     # Update hosts table and DNS | ||||
|     # Update hosts table | ||||
|     sleep(5); # Time needed to update /etc/hosts | ||||
|     `makehosts`; | ||||
|     `makedns`; | ||||
|     `/opt/xcat/sbin/makehosts`; | ||||
|     `/opt/xcat/sbin/makedns`; | ||||
|  | ||||
|     # Update DHCP | ||||
|     `makedhcp -a`; | ||||
|     `/opt/xcat/sbin/makedhcp -a`; | ||||
|     println( $callback, "hosts table, DHCP, and DNS updated" ); | ||||
|  | ||||
|     # Clone virtual machine     | ||||
|     sleep(5); # Time needed to update /etc/hosts | ||||
|     $out = `mkvm $node $src_node pool=$disk_pool`; | ||||
|     $out = `/opt/xcat/bin/mkvm $node $src_node pool=$disk_pool`; | ||||
|     println( $callback, "$out" ); | ||||
|     if ( $out =~ m/Error/i || $out =~ m/Failed/i ) { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|          | ||||
|     # Configure Ganglia monitoring | ||||
|     $out = `moncfg gangliamon $node -r`; | ||||
|     $out = `/opt/xcat/bin/moncfg gangliamon $node -r`; | ||||
|      | ||||
|     # Show node information, e.g. IP, hostname, and root password | ||||
|     $out = `lsdef $node | egrep "ip=|hostnames="`; | ||||
|     $out = `/opt/xcat/bin/lsdef $node | egrep "ip=|hostnames="`; | ||||
|     my $rootpw = getsysrootpw(); | ||||
|     println( $callback, "Your virtual machine is ready. It may take a few minutes before you can logon. Below is your VM attributes." ); | ||||
|     println( $callback, "$out" ); | ||||
| @@ -864,7 +863,7 @@ sub findfreenode { | ||||
|     	if ($node && $ipaddr && $hostname) { | ||||
|     		 | ||||
|     		# Check against xCAT tables, /etc/hosts, and ping to see if hostname is already used | ||||
| 		    if (`nodels $node` || `cat /etc/hosts | grep "$ipaddr "` || !(`ping -c 4 $ipaddr` =~ m/100% packet loss/)) {         | ||||
| 		    if (`/opt/xcat/bin/nodels $node` || `cat /etc/hosts | grep "$ipaddr "` || !(`ping -c 4 $ipaddr` =~ m/100% packet loss/)) {         | ||||
| 		        next; | ||||
| 		    } else { | ||||
| 		    	$found = 1; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user