mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| BEGIN
 | |
| {
 | |
|     $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr';
 | |
| }
 | |
| use lib "$::XCATROOT/lib/perl";
 | |
| 
 | |
| use Cwd;
 | |
| use File::Basename;
 | |
| use xCAT::MsgUtils;
 | |
| use xCAT::Client;
 | |
| use strict;
 | |
| use Getopt::Std;
 | |
| 
 | |
| my $bname = basename($0);
 | |
| 
 | |
| #########################################
 | |
| # Main
 | |
| #
 | |
| #   xcatDBcmds
 | |
| #
 | |
| #	Build hash and submit request
 | |
| #
 | |
| #	Handles: mkdef, chdef, lsdef, rmdef, mknimimage, rmnimimage,
 | |
| #		nimnodeset, mkdsklsnode, rmdsklsnode, and xcat2nim commands
 | |
| #
 | |
| #	Note: The subroutines that implement these commands
 | |
| #		are, for the most part, in:
 | |
| #			/opt/xcat/lib/perl/xCAT_plugin/DBobjectdefs.pm
 | |
| #			/opt/xcat/lib/perl/xCAT_plugin/xcat2nim.pm
 | |
| #			/opt/xcat/lib/perl/xCAT_plugin/aixinstall.pm
 | |
| #			/opt/xcat/lib/perl/xCAT/DBobjUtils.pm
 | |
| #
 | |
| #########################################
 | |
| 
 | |
| my $cmdref;
 | |
| 
 | |
| # set the command name to pass to the plugin
 | |
| if ($bname =~ /xcatDBcmds/)
 | |
| {
 | |
|     $cmdref->{command}->[0] = shift @ARGV;
 | |
| }
 | |
| elsif ($bname =~ /^(.*$)/)
 | |
| {
 | |
|     $cmdref->{command}->[0] = $1;
 | |
| }
 | |
| else
 | |
| {
 | |
|     printf("Bad usage\n");
 | |
|     exit 1;
 | |
| }
 | |
| 
 | |
| $cmdref->{cwd}->[0] = cwd();
 | |
| 
 | |
| # get info from files piped in as stdin
 | |
| my $data;
 | |
| if ((($^O =~ /^linux/i) && ($ENV{'SHELL'} =~ /\/ksh$/)) || !defined($ENV{'TERM'}))
 | |
| {
 | |
|     my $rout;
 | |
|     my $rin = "";
 | |
|     vec($rin, fileno(STDIN), 1) = 1;
 | |
|     my $nfound = select($rout = $rin, "", "", 1);
 | |
|     if ($nfound)
 | |
|     {
 | |
|         while (<STDIN>) { $data .= $_; }
 | |
|         $cmdref->{stdin}->[0] = $data;
 | |
|     }
 | |
| }
 | |
| else
 | |
| {
 | |
|     unless (-t STDIN) {
 | |
|         while (<STDIN>) { $data .= $_; }
 | |
|         $cmdref->{stdin}->[0] = $data;
 | |
|     }
 | |
| }
 | |
| 
 | |
| # The noderange can be specified through a noderange file
 | |
| # the noderange file can be a relative path,
 | |
| # convert the relative path to a full path.
 | |
| my @tmpargv = ();
 | |
| my @tmpv    = @ARGV;
 | |
| foreach my $a (@tmpv)
 | |
| {
 | |
|     if (!($a =~ /=/) && !($a =~ /^-/)) {
 | |
|         my @tempnr = ();
 | |
|         foreach my $nr (split(/,/, $a)) {
 | |
|             if ($nr =~ /^\^(.*)$/) {
 | |
|                 my $nrf = $1;
 | |
|                 if ($nrf !~ /^\//) {    #relative path
 | |
|                     $nrf = Cwd::abs_path($nrf);
 | |
|                 }
 | |
|                 $nrf = "\^" . $nrf;
 | |
|                 push @tempnr, $nrf;
 | |
|             } else {
 | |
|                 push @tempnr, $nr;
 | |
|             }
 | |
|         }
 | |
|         $a = join(',', @tempnr);
 | |
|     }
 | |
|     push @tmpargv, $a;
 | |
| }
 | |
| @ARGV = @tmpargv;
 | |
| 
 | |
| # add all the cmd line args to the hash - to pass to the plugin subroutine
 | |
| foreach my $a (@ARGV)
 | |
| {
 | |
|     push(@{ $cmdref->{arg} }, $a);
 | |
| }
 | |
| 
 | |
| # For some commands we need to set the noderange value
 | |
| # - don't want to depend on the order of args so need to pick
 | |
| #   the operand that doesn't have an "=" sign ( ie. attr=val format)
 | |
| my @checkcmds = ("nimnodeset", "mkdsklsnode", "rmdsklsnode", "xcat2nim", "nimnodecust");
 | |
| if (grep(/^$bname$/, @checkcmds)) {
 | |
| 
 | |
|     # strip off all options
 | |
|     # use getopt instead of getopts to let long options pass through
 | |
|     getopt('ismot');
 | |
| 
 | |
|     # check the operands for a noderange
 | |
|     while (my $a = shift(@ARGV)) {
 | |
|         if (!($a =~ /=/) && !($a =~ /^-/)) {
 | |
|             $cmdref->{noderange}->[0] = $a;
 | |
|             last;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| xCAT::Client::submit_request($cmdref, \&xCAT::Client::handle_response);
 | |
| exit $xCAT::Client::EXITCODE;
 |