create image on web gui
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9176 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		@@ -135,6 +135,12 @@ function loadImages(data) {
 | 
			
		||||
		loadCopyCdPage();
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	// Create new button
 | 
			
		||||
	var newBtn = createButton("Create Image");
 | 
			
		||||
	newBtn.bind('click',function(event){
 | 
			
		||||
		loadCreateImage();
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	// Create edit button
 | 
			
		||||
	var editBtn = createButton('Edit');
 | 
			
		||||
	editBtn.bind('click', function(event){
 | 
			
		||||
@@ -170,6 +176,7 @@ function loadImages(data) {
 | 
			
		||||
	 */
 | 
			
		||||
	var actionsBar = $('<div></div>').css('margin', '10px 0px');
 | 
			
		||||
	actionsBar.append(copyLinuxBtn);
 | 
			
		||||
	actionsBar.append(newBtn);
 | 
			
		||||
	actionsBar.append(editBtn);
 | 
			
		||||
	actionsBar.append(saveBtn);
 | 
			
		||||
	actionsBar.append(undoBtn);
 | 
			
		||||
@@ -418,6 +425,195 @@ function setImageDefAttrs(data) {
 | 
			
		||||
	} // End of for
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *Load create image page
 | 
			
		||||
 *
 | 
			
		||||
 *@param Nothing
 | 
			
		||||
 *		Create a new image for provision
 | 
			
		||||
 *@return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function loadCreateImage(){
 | 
			
		||||
	// get nodes tab
 | 
			
		||||
	var tab=getProvisionTab();
 | 
			
		||||
	var tabId = 'createImageTab';
 | 
			
		||||
	//Generate new tab ID
 | 
			
		||||
	if($('#' + tabId).length){
 | 
			
		||||
		tab.select(tabId);
 | 
			
		||||
		return ;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Open new tab
 | 
			
		||||
	// Create set properties form 
 | 
			
		||||
	var setPropsForm = $('<div class="form"></div>');
 | 
			
		||||
 | 
			
		||||
	var infoBar= createInfoBar('Input the image info ,you want to generate. When you finished, click generate.');
 | 
			
		||||
	setPropsForm.append(infoBar);
 | 
			
		||||
	
 | 
			
		||||
	// Create an input for each generate attribute
 | 
			
		||||
	var showStr = '';
 | 
			
		||||
	//os version selector
 | 
			
		||||
	showStr += '<p><label>OS Version:</label><select id="osvers"><option value="rhsel6">rhlse6</option></select></p>';
 | 
			
		||||
	//os arch selector
 | 
			
		||||
	showStr += '<p><label>OS Architecture:</label><select id="osarch"><option value="ppc64">ppc64</option></select></p>';
 | 
			
		||||
	//net boot interface input
 | 
			
		||||
	showStr += '<p><label>Net Boot Interface:</label><input type="text" id="netbootif"></p>';
 | 
			
		||||
	//profile selector
 | 
			
		||||
	showStr += '<p><label>Profile:</label><select id="profile"><option value="compute">compute</option>' + 
 | 
			
		||||
			   '<option value="service">service</option></select></p>';
 | 
			
		||||
	//boot method selector
 | 
			
		||||
	showStr += '<p><label>Boot Method:</label><select id="bootmethod"><option value="stateless">stateless</option>' + 
 | 
			
		||||
	   		   '<option value="statelite">statelite</option></select></p>';
 | 
			
		||||
 | 
			
		||||
	// advanced software when select the compute profile
 | 
			
		||||
	showStr += '<fieldset id="hpcsoft"><legend>HPC Software Stack</legend><ul>' +
 | 
			
		||||
			   '<li id="gpfsli"><input type="checkbox" onclick="gpfsCheck(this)" name="gpfs">GPFS</li>' + 
 | 
			
		||||
			   '<li id="loadli"><input type="checkbox" name="loadll">LoadLeveler</li>'
 | 
			
		||||
			   + '</ul></fieldset>';
 | 
			
		||||
	
 | 
			
		||||
	setPropsForm.append(showStr);
 | 
			
		||||
	
 | 
			
		||||
	var createImageBtn=createButton("CreateImage");
 | 
			
		||||
	createImageBtn.bind('click',function(event){
 | 
			
		||||
		createImage();
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	setPropsForm.append(createImageBtn);	
 | 
			
		||||
	tab.add(tabId, 'Create Image', setPropsForm, true);
 | 
			
		||||
	tab.select(tabId);
 | 
			
		||||
	
 | 
			
		||||
	//for the profile select, if not compute could not select the software
 | 
			
		||||
	$('#createImageTab #profile').bind('change', function(){
 | 
			
		||||
		if('compute' != $(this).attr('value')){
 | 
			
		||||
			$('#createImageTab #hpcsoft').hide();
 | 
			
		||||
		}
 | 
			
		||||
		else{
 | 
			
		||||
			$('#createImageTab #hpcsoft').show();
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * use users' input or select to create image
 | 
			
		||||
 * 
 | 
			
		||||
 * @param 
 | 
			
		||||
 *  
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function createImage(){
 | 
			
		||||
	var osvers = $("#createImageTab #osvers").val();
 | 
			
		||||
	var osarch = $("#createImageTab #osarch").val();
 | 
			
		||||
	var profile = $("#createImageTab #profile").val();
 | 
			
		||||
	var bootInterface = $("#createImageTab #netbootif").val();
 | 
			
		||||
	var bootMethod = $("#createImageTab #bootmethod").val();
 | 
			
		||||
	
 | 
			
		||||
	$('#createImageTab .ui-state-error').remove();
 | 
			
		||||
	
 | 
			
		||||
	if (!bootInterface){
 | 
			
		||||
		$("#createImageTab").prepend('<div class="ui-state-error ui-corner-all">' + 
 | 
			
		||||
					                 '<p>Input the netboot interface please.</p></div>');
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	var createImageArgs = "createimage;" + osvers + ";" + osarch + ";" + profile + ";" + bootInterface + ";" +
 | 
			
		||||
						  bootMethod + ";";
 | 
			
		||||
	
 | 
			
		||||
	$("#createImageTab :checkbox:checked").each(function (){
 | 
			
		||||
		createImageArgs+=$(this).attr("name")+",";
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	createImageArgs=createImageArgs.substring(0,(createImageArgs.length-1));
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		 url : 'lib/cmd.php',
 | 
			
		||||
         dataType : 'json',
 | 
			
		||||
         data : {
 | 
			
		||||
   		         cmd : 'webrun',
 | 
			
		||||
                 tgt : '',
 | 
			
		||||
                 args : createImageArgs,
 | 
			
		||||
                 msg : ''
 | 
			
		||||
		},
 | 
			
		||||
		success : function(data){
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * when users want to install gpfs on compute node, 
 | 
			
		||||
 * should check the rpms install and copy status first.
 | 
			
		||||
 * 
 | 
			
		||||
 * @param 
 | 
			
		||||
 *  
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function gpfsCheck(obj) {
 | 
			
		||||
	if(0 < $('#createImageTab #gpfsli .ui-icon-circle-check').size()){
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	$('#createImageTab #gpfsli .ui-state-error').remove();
 | 
			
		||||
	$('#createImageTab #gpfsli').append(createLoader());
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		url : 'lib/systemcmd.php',
 | 
			
		||||
		dataType : 'json',
 | 
			
		||||
		data:{
 | 
			
		||||
			cmd : 'rpm -q gpfs.base gpfs.gpl gpfs.msg  xCAT-IBMhpc createrepo'
 | 
			
		||||
		},
 | 
			
		||||
		success : function(data){
 | 
			
		||||
			var checkResult=data.rsp.split("\n");
 | 
			
		||||
			var errorStr = '';
 | 
			
		||||
			
 | 
			
		||||
			for (var i in checkResult){
 | 
			
		||||
				if (-1 != checkResult[i].indexOf("not installed")){
 | 
			
		||||
					errorStr += ' ' + checkResult[i] + ',';
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			if ('' != errorStr){
 | 
			
		||||
				errorStr = errorStr.substr(0, errorStr.length - 1);
 | 
			
		||||
				$(":checkbox[name=gpfs]").attr("checked",false);
 | 
			
		||||
				//add the error
 | 
			
		||||
				var errorPart = '<div style="display:inline-block;margin:0px" class="ui-state-error">' +
 | 
			
		||||
								'<span class="ui-icon ui-icon-alert"></span>' + errorStr + '</div>';
 | 
			
		||||
				$('#createImageTab #gpfsli').find('img').remove();
 | 
			
		||||
				$('#createImageTab #gpfsli').append(errorPart);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			gpfsCopyCheck();
 | 
			
		||||
		}
 | 
			
		||||
	});	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function gpfsCopyCheck(){
 | 
			
		||||
	var osvers=$("#createImageTab #osvers").val();
 | 
			
		||||
	var osarch=$("#createImageTab #osarch").val();
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		url: 'lib/systemcmd.php',
 | 
			
		||||
		dataType : 'json',
 | 
			
		||||
		data : {
 | 
			
		||||
			cmd : 'ls /install/post/otherpkgs/' + osvers + '/' + osarch + '/gpfs/gpfs.gplbin*.rpm'
 | 
			
		||||
		},
 | 
			
		||||
		success : function(data){
 | 
			
		||||
			var installPath = '/install/post/otherpkgs/' + $("#createImageTab #osvers").val() + '/' + 
 | 
			
		||||
							  $("#createImageTab #osarch").val() + '/gpfs';
 | 
			
		||||
			//remove the loading image.
 | 
			
		||||
			$('#createImageTab #gpfsli').find('img').remove();
 | 
			
		||||
			
 | 
			
		||||
			//check the return information
 | 
			
		||||
			if (null == data.rsp){
 | 
			
		||||
				var errorPart = '<div style="display:inline-block;margin:0px" class="ui-state-error">' +
 | 
			
		||||
								'<span class="ui-icon ui-icon-alert"></span>Build the GPFS portability layer rpm, install it and copy it into ' +
 | 
			
		||||
								installPath + '.<br/>For information: <a href="http://sourceforge.net/apps/mediawiki/xcat/index.php?title=Setting_up_GPFS_in_a_Statelite_or_Stateless_Cluster#Install.2FBuild_GPFS" target="_blank">Install/Build GPFS</a></div>';
 | 
			
		||||
				$('#createImageTab #gpfsli').append(errorPart);
 | 
			
		||||
				$(":checkbox[name=gpfs]").attr("checked",false);
 | 
			
		||||
			}
 | 
			
		||||
			else{
 | 
			
		||||
				var infoPart = '<div style="display:inline-block;margin:0px"><span class="ui-icon ui-icon-circle-check"></span></div>';
 | 
			
		||||
				$('#createImageTab #gpfsli').append(infoPart);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Load set image properties page
 | 
			
		||||
 * 
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,7 @@ sub process_request {
 | 
			
		||||
		'monls'         => \&web_monls,
 | 
			
		||||
		'discover'      => \&web_discover,
 | 
			
		||||
		'updatevpd'     => \&web_updatevpd,
 | 
			
		||||
		'createimage'   => \&web_createimage
 | 
			
		||||
		#'xdsh' => \&web_xdsh,
 | 
			
		||||
		#THIS list needs to be updated
 | 
			
		||||
	);
 | 
			
		||||
@@ -1027,4 +1028,205 @@ sub web_updatevpd{
 | 
			
		||||
    $vpdtab->close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub web_createimage{
 | 
			
		||||
    my ( $request, $callback, $sub_req ) = @_;
 | 
			
		||||
    my $ostype = $request->{arg}->[1];
 | 
			
		||||
    my $osarch = lc($request->{arg}->[2]);
 | 
			
		||||
    my $profile = $request->{arg}->[3];
 | 
			
		||||
    my $bootif = $request->{arg}->[4];
 | 
			
		||||
    my $imagetype = lc($request->{arg}->[5]);
 | 
			
		||||
    my @softArray;
 | 
			
		||||
    my $netdriver = '';
 | 
			
		||||
    my $installdir = xCAT::Utils->getInstallDir();
 | 
			
		||||
    my $tempos = $ostype;
 | 
			
		||||
    $tempos =~ s/[0-9]//;
 | 
			
		||||
    my $CONFILE;
 | 
			
		||||
    my $archFlag = 0;
 | 
			
		||||
    my $ret = '';
 | 
			
		||||
    my $cmdPath = '';
 | 
			
		||||
 | 
			
		||||
    if ($request->{arg}->[6]){
 | 
			
		||||
        @softArray = split(',' , $request->{arg}->[6]);
 | 
			
		||||
 | 
			
		||||
        #check the arch 
 | 
			
		||||
        if('ppc64' ne $osarch){
 | 
			
		||||
            $callback->({data=>'Error: only support PPC64!'});
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #check the osver
 | 
			
		||||
        unless (-e "/opt/xcat/share/xcat/IBMhpc/IBMhpc.$ostype.ppc64.pkglist"){
 | 
			
		||||
            $callback->({data=>'Error: only support rhels6 and sles11!'});
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #check the custom package, if the path is not exist, must create the dir first
 | 
			
		||||
        if (-e "$installdir/custom/netboot/$ostype/"){
 | 
			
		||||
            #the path is exist, so archive all file under this path.
 | 
			
		||||
            opendir(TEMPDIR, "$installdir/custom/netboot/$ostype/");
 | 
			
		||||
            my @fileArray = readdir(TEMPDIR);
 | 
			
		||||
            closedir(TEMPDIR);
 | 
			
		||||
            if (2 < scalar(@fileArray)){
 | 
			
		||||
                $archFlag = 1;
 | 
			
		||||
                unless (-e "/tmp/webImageArch/"){
 | 
			
		||||
                    system("mkdir -p /tmp/webImageArch/");
 | 
			
		||||
                }
 | 
			
		||||
                system("mv $installdir/custom/netboot/$ostype/*.* /tmp/webImageArch/");
 | 
			
		||||
            }
 | 
			
		||||
            else{
 | 
			
		||||
                $archFlag = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else{
 | 
			
		||||
            #do not need to archive
 | 
			
		||||
            $archFlag = 0;
 | 
			
		||||
            system("mkdir -p $installdir/custom/netboot/$ostype/");
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        #write pkglist
 | 
			
		||||
        open($CONFILE, ">$installdir/custom/netboot/$ostype/$profile.pkglist");
 | 
			
		||||
        print $CONFILE "#INCLUDE:/opt/xcat/share/xcat/IBMhpc/IBMhpc.$ostype.ppc64.pkglist# \n";
 | 
			
		||||
        close($CONFILE);
 | 
			
		||||
 | 
			
		||||
        #write otherpkglist
 | 
			
		||||
        open($CONFILE, ">$installdir/custom/netboot/$ostype/$profile.otherpkgs.pkglist");
 | 
			
		||||
        print $CONFILE "\n";
 | 
			
		||||
        close($CONFILE);
 | 
			
		||||
 | 
			
		||||
        #write exlist for stateless
 | 
			
		||||
        open($CONFILE, ">/install/custom/netboot/$ostype/$profile.exlist");
 | 
			
		||||
        print $CONFILE "#INCLUDE:/opt/xcat/share/xcat/IBMhpc/IBMhpc.$ostype.$osarch.exlist#\n";
 | 
			
		||||
        close($CONFILE);
 | 
			
		||||
 | 
			
		||||
        #write postinstall
 | 
			
		||||
        open($CONFILE, ">$installdir/custom/netboot/$ostype/$profile.postinstall");
 | 
			
		||||
        print $CONFILE "/opt/xcat/share/xcat/IBMhpc/IBMhpc.$tempos.postinstall \$1 \$2 \$3 \$4 \$5 \n";
 | 
			
		||||
        close($CONFILE);
 | 
			
		||||
 | 
			
		||||
        for my $soft (@softArray){
 | 
			
		||||
            $soft = lc($soft);
 | 
			
		||||
            if ('gpfs' eq $soft){
 | 
			
		||||
                web_gpfsConfigure($ostype, $profile, $installdir);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #chmod 
 | 
			
		||||
        system("chmod 755 $installdir/custom/netboot/$ostype/*.*");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($bootif =~ /hf/i){
 | 
			
		||||
        $netdriver = 'hf_if';
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        $netdriver = 'ibmveth';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($tempos =~ /rh/i){
 | 
			
		||||
        $cmdPath = "/opt/xcat/share/xcat/netboot/rh";
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        $cmdPath = "/opt/xcat/share/xcat/netboot/sles";
 | 
			
		||||
    }
 | 
			
		||||
    #for stateless only run packimage is ok
 | 
			
		||||
    if ('stateless' eq $imagetype){
 | 
			
		||||
        my $retInfo = xCAT::Utils->runcmd( "${cmdPath}/genimage -i $bootif -n $netdriver -o $ostype -p $profile", -1, 1 );
 | 
			
		||||
        $ret = join ("\n", @$retInfo);
 | 
			
		||||
        if ($::RUNCMD_RC){
 | 
			
		||||
            $callback->({data=>$ret});
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        $ret .= "\n";
 | 
			
		||||
        my $retInfo = xCAT::Utils->runcmd( "packimage -o $ostype -p $profile -a $osarch", -1, 1 );
 | 
			
		||||
        $ret .= join ("\n", @$retInfo);
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        #for statelist we should check the litefile table
 | 
			
		||||
        #step1 save the old litefile table content into litefilearchive.csv
 | 
			
		||||
        system('tabdump litefile > /tmp/litefilearchive.csv');
 | 
			
		||||
 | 
			
		||||
        #step2 write the new litefile.csv for this lite image
 | 
			
		||||
        open ($CONFILE, ">/tmp/litefile.csv");
 | 
			
		||||
        print $CONFILE "#image,file,options,comments,disable\n";
 | 
			
		||||
        print $CONFILE '"ALL","/etc/lvm/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/etc/ntp.conf","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/etc/resolv.conf","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/etc/sysconfig/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/etc/yp.conf","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/etc/ssh/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/var/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/tmp/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/root/.ssh/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/opt/xcat/","tmpfs",,' . "\n";
 | 
			
		||||
        print $CONFILE '"ALL","/xcatpost/","tmpfs",,' . "\n";
 | 
			
		||||
 | 
			
		||||
        if ('rhels' eq $tempos){
 | 
			
		||||
            print $CONFILE '"ALL","/etc/adjtime","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/securetty","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/rsyslog.conf","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/rsyslog.conf.XCATORIG","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/udev/","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/ntp.conf.predhclient","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/resolv.conf.predhclient","tmpfs",,' . "\n";
 | 
			
		||||
        }
 | 
			
		||||
        else{
 | 
			
		||||
            print $CONFILE '"ALL","/etc/ntp.conf.org","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/syslog-ng/","tmpfs",,' . "\n";
 | 
			
		||||
            print $CONFILE '"ALL","/etc/fstab","tmpfs",,' . "\n";
 | 
			
		||||
        }
 | 
			
		||||
        close($CONFILE);
 | 
			
		||||
        
 | 
			
		||||
        for my $soft (@softArray){
 | 
			
		||||
            $soft = lc($soft);
 | 
			
		||||
            system ("grep '^[^#]' /opt/xcat/share/xcat/IBMhpc/$soft/litefile.csv >> /tmp/litefile.csv");
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        system("tabrestore /tmp/litefile.csv");
 | 
			
		||||
 | 
			
		||||
        #create the image
 | 
			
		||||
        my $retInfo = xCAT::Utils->runcmd( "${cmdPath}/genimage -i $bootif -n $netdriver -o $ostype -p $profile", -1, 1 );
 | 
			
		||||
        $ret = join ("\n", @$retInfo);
 | 
			
		||||
        if ($::RUNCMD_RC){
 | 
			
		||||
            $callback->({data=>$ret});
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        $ret .= "\n";
 | 
			
		||||
        my $retInfo = xCAT::Utils->runcmd( "liteimg -o $ostype -p $profile -a $osarch", -1, 1 );
 | 
			
		||||
        $ret .= join ("\n", @$retInfo);
 | 
			
		||||
 | 
			
		||||
        #restore the litefile table
 | 
			
		||||
        system("rm -r /tmp/litefile.csv ; mv /tmp/litefilearchive.csv /tmp/litefile.csv ; tabrestore /tmp/litefile.csv");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #recover all file in the $installdir/custom/netboot/$ostype/
 | 
			
		||||
    if ($request->{arg}->[6]){
 | 
			
		||||
        system("rm -f $installdir/custom/netboot/$ostype/*.*");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if ($archFlag){
 | 
			
		||||
        system("mv /tmp/webImageArch/*.* $installdir/custom/netboot/$ostype/");
 | 
			
		||||
    }
 | 
			
		||||
    $callback->({data=>$ret});
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub web_gpfsConfigure{
 | 
			
		||||
    my ($ostype, $profile, $installdir) = @_;
 | 
			
		||||
    my $CONFILE;
 | 
			
		||||
    #other pakgs
 | 
			
		||||
    open($CONFILE, ">>$installdir/custom/netboot/$ostype/$profile.otherpkgs.pkglist");
 | 
			
		||||
    print $CONFILE "#INCLUDE:/opt/xcat/share/xcat/IBMhpc/gpfs/gpfs.otherpkgs.pkglist#\n";
 | 
			
		||||
    close($CONFILE);
 | 
			
		||||
 | 
			
		||||
    #exlist
 | 
			
		||||
    open ($CONFILE, ">>/install/custom/netboot/$ostype/$profile.exlist");
 | 
			
		||||
    print $CONFILE "#INCLUDE:/opt/xcat/share/xcat/IBMhpc/gpfs/gpfs.exlist#\n";
 | 
			
		||||
    close ($CONFILE);
 | 
			
		||||
 | 
			
		||||
    #postinstall
 | 
			
		||||
    system ('cp /opt/xcat/share/xcat/IBMhpc/gpfs/gpfs_mmsdrfs /install/postscripts/gpfs_mmsdrfs');
 | 
			
		||||
    open($CONFILE, ">>$installdir/custom/netboot/$ostype/$profile.postinstall");
 | 
			
		||||
    print $CONFILE "NODESETSTATE=genimage installroot=\$1 /opt/xcat/share/xcat/IBMhpc/gpfs/gpfs_updates \n";
 | 
			
		||||
    print $CONFILE "installroot=$1 /install/postscripts/gpfs_mmsdrfs\n";
 | 
			
		||||
    close($CONFILE);
 | 
			
		||||
}
 | 
			
		||||
1;
 | 
			
		||||
		Reference in New Issue
	
	Block a user