mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	add back the csm to xcat migration tools
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@15809 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		
							
								
								
									
										362
									
								
								xCAT-server/share/xcat/scripts/cfm2xcat
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										362
									
								
								xCAT-server/share/xcat/scripts/cfm2xcat
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,362 @@
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
			
		||||
#
 | 
			
		||||
#####################################################
 | 
			
		||||
# cfm2xcat:
 | 
			
		||||
#
 | 
			
		||||
# This routine will read in cfmupdatenode distribution files
 | 
			
		||||
# and build the files need to input to xdcp rsync function
 | 
			
		||||
# in xCAT.
 | 
			
		||||
#
 | 
			
		||||
# cfm2xcat will run cfmupdatenode -a,  it sets the environment
 | 
			
		||||
# variable  CSM_CFM_SAVE_DISTFILE to the file path input with the -i option
 | 
			
		||||
# to save the  built cfm distribution file(s).
 | 
			
		||||
# These are normally deleted after cfm runs.
 | 
			
		||||
#
 | 
			
		||||
# cfm2xcat will then take the files that were created from calling
 | 
			
		||||
# cfmupdatenode and create xCAT xdcp files synch files and store them in the
 | 
			
		||||
# path input with the -o flag.
 | 
			
		||||
#
 | 
			
		||||
#   Example:
 | 
			
		||||
#    cfm2xcat -i <...cfmsave>  -o < path to output file>
 | 
			
		||||
#    cfm2xcat -i /tmp/cfmsave -o /tmp/xcat/xcatdistfile
 | 
			
		||||
#
 | 
			
		||||
#  The routine will process all the /.../cfmsave* files and when finished,
 | 
			
		||||
#  you will have the new files xcatdistfile* and noderange* generated which
 | 
			
		||||
#  will be the correct format to input to the xdcp -F command in xCAT to run
 | 
			
		||||
#  the equivalent syncing of files that you were running on CSM.
 | 
			
		||||
#
 | 
			
		||||
#  Take the files in the /tmp/xcat/* directory from the example above and
 | 
			
		||||
#  place on your xCAT Management Node.  Then run for each file combination:
 | 
			
		||||
#   xdcp ^/tmp/xcat/noderange1 -F /tmp/xcat/xcatdistfile1
 | 
			
		||||
#  More information is in the manpage for cfm2xcat and xdcp
 | 
			
		||||
#####################################################
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Getopt::Long;
 | 
			
		||||
use Data::Dumper;
 | 
			
		||||
 | 
			
		||||
my $help;
 | 
			
		||||
my $input;
 | 
			
		||||
my $output;
 | 
			
		||||
my $rc = 0;
 | 
			
		||||
 | 
			
		||||
if (
 | 
			
		||||
    !GetOptions(
 | 
			
		||||
                'h|help'     => \$help,
 | 
			
		||||
                'i|input=s'  => \$input,
 | 
			
		||||
                'o|output=s' => \$output,
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
    &usage;
 | 
			
		||||
    exit 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ($help)
 | 
			
		||||
{
 | 
			
		||||
    &usage;
 | 
			
		||||
    exit 0;
 | 
			
		||||
}
 | 
			
		||||
if (!($input))
 | 
			
		||||
{
 | 
			
		||||
    print "Input file path must be supplied with the -i flag.\n";
 | 
			
		||||
    exit 1;
 | 
			
		||||
}
 | 
			
		||||
if (!($output))
 | 
			
		||||
{
 | 
			
		||||
    print "Output file path and name must be supplied with the -o flag.\n";
 | 
			
		||||
    exit 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# call cfmupdatenode and build cfm distribution files
 | 
			
		||||
&buildcfmdistfiles($input);
 | 
			
		||||
if (-e ($input))  # if anything built
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    # build the xcat sync files
 | 
			
		||||
    $rc = &buildxcatrsyncfiles($input, $output);
 | 
			
		||||
    if ($rc == 0)
 | 
			
		||||
    {
 | 
			
		||||
        print
 | 
			
		||||
          "Conversion finished, please carefully review $output files! Make sure that all the files list to sync to the nodes are relevant and available on the xCAT system in the directory indicated. \n";
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        print " Error converting cfm file to xdcp files.\n";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
else
 | 
			
		||||
{
 | 
			
		||||
    print " Error building CFM dist files, or nothing to do.\n";
 | 
			
		||||
}
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
# end main
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# Builds the CFM distribution files from the cfmupdatenode -a call
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub buildcfmdistfiles
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    my ($cfmfile) = @_;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
    my @output;
 | 
			
		||||
 | 
			
		||||
    # remove old files , if they exist
 | 
			
		||||
    my $tmpcfmfile = $cfmfile;
 | 
			
		||||
    if (-e ($tmpcfmfile))
 | 
			
		||||
    {
 | 
			
		||||
        $tmpcfmfile .= "*";
 | 
			
		||||
        $cmd    = "rm  $tmpcfmfile";
 | 
			
		||||
        @output = runcmd($cmd);
 | 
			
		||||
        if ($::RUNCMD_RC != 0)
 | 
			
		||||
        {
 | 
			
		||||
            print " Error running $cmd.\n";
 | 
			
		||||
            return 1;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # export the CSM_CFM_SAVE_DISTFILE variable to the input (-i)
 | 
			
		||||
    # path, makes cfmupdatenode save the dist file(s) from the run in a
 | 
			
		||||
    # file by that name
 | 
			
		||||
 | 
			
		||||
    $cmd = "CSM_CFM_SAVE_DISTFILE=$cfmfile cfmupdatenode -a";
 | 
			
		||||
 | 
			
		||||
    # run the cfmupdate command
 | 
			
		||||
    @output = runcmd($cmd);
 | 
			
		||||
    if ($::RUNCMD_RC != 0)
 | 
			
		||||
    {
 | 
			
		||||
        print " Error running $cmd.\n";
 | 
			
		||||
        return 1;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# Builds the xdcp sync files from the CFM dist files
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub buildxcatrsyncfiles
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    my ($CFMfiles, $xcatfile) = @_;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
    my @output;
 | 
			
		||||
    my %noderangequeue;
 | 
			
		||||
 | 
			
		||||
    # remove old files, if they exist
 | 
			
		||||
    my $tmpxcatfile = $xcatfile;
 | 
			
		||||
    if (-e ($tmpxcatfile))
 | 
			
		||||
    {
 | 
			
		||||
        $tmpxcatfile .= "*";
 | 
			
		||||
        $cmd    = "rm  $tmpxcatfile";
 | 
			
		||||
        @output = runcmd($cmd);
 | 
			
		||||
        if ($::RUNCMD_RC != 0)
 | 
			
		||||
        {
 | 
			
		||||
            print " Error running $cmd.\n";
 | 
			
		||||
            return 1;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # get list of CFM files that were built
 | 
			
		||||
    $cmd = "ls $CFMfiles";
 | 
			
		||||
    $cmd .= "*";
 | 
			
		||||
    my @CFMfilelist = runcmd($cmd);
 | 
			
		||||
    if ($::RUNCMD_RC != 0)
 | 
			
		||||
    {
 | 
			
		||||
        print " Error running $cmd.\n";
 | 
			
		||||
        return 1;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $msg = "Building xCat rsync files $xcatfile from $CFMfiles\n";
 | 
			
		||||
    print "$msg";
 | 
			
		||||
 | 
			
		||||
    # For each CFM output file, open the CFM input file to read
 | 
			
		||||
    foreach my $cfmfile (@CFMfilelist)
 | 
			
		||||
    {
 | 
			
		||||
        open(CFM, "< $cfmfile")
 | 
			
		||||
          or die "Can't open $cfmfile for reading: $!";
 | 
			
		||||
 | 
			
		||||
        #
 | 
			
		||||
        # convert the CFM rdist format to the xdcp format for rsync
 | 
			
		||||
        # build a hash of noderange ->  to distribution files
 | 
			
		||||
        #
 | 
			
		||||
        while (my $line = <CFM>)
 | 
			
		||||
        {
 | 
			
		||||
            chomp $line;
 | 
			
		||||
            if ($line =~ /^#/)    # skip commments
 | 
			
		||||
            {
 | 
			
		||||
                next;
 | 
			
		||||
            }
 | 
			
		||||
            if ($line =~ /.runclocal/)    # skip sending runclocal
 | 
			
		||||
            {
 | 
			
		||||
                next;
 | 
			
		||||
            }
 | 
			
		||||
            my ($sourcefile, $rest)     = split("->",      $line);
 | 
			
		||||
            my ($tmpnodes,   $destfile) = split("install", $rest);
 | 
			
		||||
 | 
			
		||||
            # get rid of parenthesis
 | 
			
		||||
            my ($paren, $tnodes) = split(/\(/, $tmpnodes);
 | 
			
		||||
            my ($nodes, $paren2) = split(/\)/, $tnodes);
 | 
			
		||||
            chomp $nodes;
 | 
			
		||||
 | 
			
		||||
            # strip off /cfmroot and /var/opt/csm/cfmlocal paths
 | 
			
		||||
 | 
			
		||||
            my ($root, $strippedsourcefile) = split("cfmroot", $sourcefile);
 | 
			
		||||
            chomp $strippedsourcefile;
 | 
			
		||||
            my ($root2, $strippeddestfile) = split("cfmlocal", $destfile);
 | 
			
		||||
            chomp $strippeddestfile;
 | 
			
		||||
            chop $strippeddestfile;
 | 
			
		||||
            $noderangequeue{$nodes}{'files'}{$strippedsourcefile} =
 | 
			
		||||
              $strippeddestfile;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        close(CFM);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # now take the hash and build the xdcp file(s), key is the noderange
 | 
			
		||||
    # (use short hostname)
 | 
			
		||||
    # one for each noderange  and a matching noderange file
 | 
			
		||||
    #  for example   xdcpfile1   xdcpfile1.noderange
 | 
			
		||||
    #
 | 
			
		||||
    my $index;
 | 
			
		||||
    foreach (keys %noderangequeue)
 | 
			
		||||
    {
 | 
			
		||||
        my $noderange = $_;
 | 
			
		||||
 | 
			
		||||
        # open the xCAT output files to write
 | 
			
		||||
 | 
			
		||||
        my $newxcatfilenr = $xcatfile;
 | 
			
		||||
        $newxcatfilenr .= ".nr";
 | 
			
		||||
 | 
			
		||||
        # file to hold the noderange
 | 
			
		||||
        if ($index)
 | 
			
		||||
        {    # processing more than one noderange then  building
 | 
			
		||||
                # more than one xdcp file
 | 
			
		||||
            $newxcatfilenr .= "$index";
 | 
			
		||||
        }
 | 
			
		||||
        open(XCATNR, "> $newxcatfilenr")
 | 
			
		||||
          or die "Can't open $newxcatfilenr for writing: $!";
 | 
			
		||||
 | 
			
		||||
        # create an appropriate noderange ( comma seperated)
 | 
			
		||||
        my @nodes = split(/ /, $noderange);
 | 
			
		||||
        my $goodnr = "";
 | 
			
		||||
        foreach my $node (@nodes)
 | 
			
		||||
        {
 | 
			
		||||
            if ($node !~ /^\s*$/)
 | 
			
		||||
            {    #skip blanks
 | 
			
		||||
                my @shorthost = split(/\./, $node);
 | 
			
		||||
                $goodnr .= $shorthost[0];
 | 
			
		||||
                $goodnr .= ",";
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        chop $goodnr;
 | 
			
		||||
 | 
			
		||||
        # write into the noderange file
 | 
			
		||||
        write_line_nr($goodnr);
 | 
			
		||||
        write_line_nr("\n");
 | 
			
		||||
 | 
			
		||||
        # file to hold the rsync interface file to file list
 | 
			
		||||
        my $newxcatfile = $xcatfile;
 | 
			
		||||
 | 
			
		||||
        # file to hold the noderange
 | 
			
		||||
        if ($index)
 | 
			
		||||
        {    # processing more than one noderange then  building
 | 
			
		||||
                # more than one xdcp file
 | 
			
		||||
            $newxcatfile .= "$index";
 | 
			
		||||
        }
 | 
			
		||||
        open(XCAT, "> $newxcatfile")
 | 
			
		||||
          or die "Can't open $newxcatfile for writing: $!";
 | 
			
		||||
        my $srcfile;
 | 
			
		||||
        my $destfile;
 | 
			
		||||
        foreach my $sourcefile (keys %{$noderangequeue{$noderange}{'files'}})
 | 
			
		||||
        {
 | 
			
		||||
            $srcfile  = $sourcefile;
 | 
			
		||||
            $destfile = $noderangequeue{$noderange}{'files'}{$sourcefile};
 | 
			
		||||
            write_line($srcfile);
 | 
			
		||||
            write_line("-> ");
 | 
			
		||||
            write_line($destfile);
 | 
			
		||||
            write_line("\n");
 | 
			
		||||
        }
 | 
			
		||||
        close(XCAT);
 | 
			
		||||
        close(XCATNR);
 | 
			
		||||
        $index++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# runs the input command and handles the errors.   Returns the output
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub runcmd
 | 
			
		||||
{
 | 
			
		||||
    my ($cmd) = @_;
 | 
			
		||||
    my $rc = 0;
 | 
			
		||||
    $::RUNCMD_RC = 0;
 | 
			
		||||
    my $outref = [];
 | 
			
		||||
    @$outref = `$cmd`;
 | 
			
		||||
    if ($?)
 | 
			
		||||
    {
 | 
			
		||||
        $rc          = $?;
 | 
			
		||||
        $::RUNCMD_RC = $rc;
 | 
			
		||||
        if ($rc > 0)
 | 
			
		||||
        {
 | 
			
		||||
            my $msg = "$cmd returned rc=$rc @$outref\n";
 | 
			
		||||
            print "$msg";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    chomp(@$outref);
 | 
			
		||||
    return @$outref;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub usage
 | 
			
		||||
{
 | 
			
		||||
    print "CFM distribution file to xCAT xdcp rsync migration facility.\n";
 | 
			
		||||
    print "Usage:\n";
 | 
			
		||||
    print "\t-h - usage\n";
 | 
			
		||||
    print
 | 
			
		||||
      "\t-i - Complete path to the CFM file(s) saved to be converted for xCAT.";
 | 
			
		||||
    print "                Be sure directory exists.\n";
 | 
			
		||||
    print
 | 
			
		||||
      "\t-o - Complete Path to the xCAT xdcp rsync input file(s) created from.";
 | 
			
		||||
    print "                the CFM file. Be sure directory exists.\n";
 | 
			
		||||
    print
 | 
			
		||||
      "    Example: cfm2xcat -i /tmp/migration/cfmfiles -o /tmp/migration/xdcpfiles.";
 | 
			
		||||
    print "\n";
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# write to xCAT rsync files
 | 
			
		||||
#
 | 
			
		||||
sub write_line
 | 
			
		||||
{
 | 
			
		||||
    print XCAT @_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# write to xCAT rsync noderange files
 | 
			
		||||
#
 | 
			
		||||
sub write_line_nr
 | 
			
		||||
{
 | 
			
		||||
    print XCATNR @_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										730
									
								
								xCAT-server/share/xcat/scripts/csm2xcat
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										730
									
								
								xCAT-server/share/xcat/scripts/csm2xcat
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,730 @@
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
			
		||||
#
 | 
			
		||||
#####################################################
 | 
			
		||||
#
 | 
			
		||||
# This script will read the CSM database and build
 | 
			
		||||
# xCAT stanza files to be input into an xCAT database
 | 
			
		||||
# using the chdef command
 | 
			
		||||
# example node.stanza | chdef -z
 | 
			
		||||
#
 | 
			
		||||
#####################################################
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Getopt::Long;
 | 
			
		||||
use Data::Dumper;
 | 
			
		||||
 | 
			
		||||
my $needhelp  = 0;
 | 
			
		||||
my $directory = "/tmp/csm2xcat";
 | 
			
		||||
 | 
			
		||||
if (
 | 
			
		||||
    !GetOptions("help"  => \$needhelp,
 | 
			
		||||
                "dir=s" => \$directory,)
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
    &usage;
 | 
			
		||||
    exit 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ($needhelp)
 | 
			
		||||
{
 | 
			
		||||
    &usage;
 | 
			
		||||
    exit 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#Create the users choice directory
 | 
			
		||||
mkdir $directory unless -d $directory;
 | 
			
		||||
 | 
			
		||||
# create a log
 | 
			
		||||
open(LOG, ">$directory/conversion.log")
 | 
			
		||||
  or die "Can't open logfile for writing: $!";
 | 
			
		||||
&log_this("Conversion started at " . scalar(localtime()));
 | 
			
		||||
 | 
			
		||||
# build the stanza files for the site table
 | 
			
		||||
#  rsh/rcp attribute not longer supported.  Leave logic here
 | 
			
		||||
# incase we decide there are other attribute needed
 | 
			
		||||
#&getSiteinfo;
 | 
			
		||||
 | 
			
		||||
# build the stanza files for the node
 | 
			
		||||
&getNodeinfo;
 | 
			
		||||
 | 
			
		||||
# build the stanza files for the devices
 | 
			
		||||
&getDevinfo;
 | 
			
		||||
 | 
			
		||||
log_this("Conversion finished at " . scalar(localtime()));
 | 
			
		||||
print
 | 
			
		||||
  "Conversion finished, please carefully review $directory/conversion.log and check results in the $directory  stanza files before using chdef -z to update the database!\n";
 | 
			
		||||
close(LOG);
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
# end main
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# logger
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub log_this
 | 
			
		||||
{
 | 
			
		||||
    print LOG join('', @_), "\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# write to stanza files
 | 
			
		||||
#
 | 
			
		||||
sub write_stanza
 | 
			
		||||
{
 | 
			
		||||
    print STANZA @_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# runs csmconfig or uses the csmconfig.output file
 | 
			
		||||
#  and builds site table stanza file
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub getSiteinfo
 | 
			
		||||
{
 | 
			
		||||
    log_this("Reading Site information\n");
 | 
			
		||||
    print "Running csmconfg to read site info!\n";
 | 
			
		||||
 | 
			
		||||
    # open the site stanza file
 | 
			
		||||
    my $stanzafile = "$directory/site.stanza";
 | 
			
		||||
    open(STANZA, ">$stanzafile")
 | 
			
		||||
      or die "Can't open $stanzafile for writing: $!";
 | 
			
		||||
    write_stanza("# <xCAT data object stanza file>\n\n");
 | 
			
		||||
    write_stanza("clustersite:\n");
 | 
			
		||||
    write_stanza("    objtype=site\n");
 | 
			
		||||
 | 
			
		||||
    my @results;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
 | 
			
		||||
    # use of file is for debug
 | 
			
		||||
    my $csmconfiginfofile = "$directory/csmconfigdebug.output";
 | 
			
		||||
    if (-e $csmconfiginfofile)
 | 
			
		||||
    {    # use the imported file
 | 
			
		||||
        $cmd = "cat $csmconfiginfofile";
 | 
			
		||||
        log_this("Reading $csmconfiginfofile information\n");
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {    # run the command
 | 
			
		||||
        $cmd     = "/opt/csm/bin/csmconfig";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    if ($::RUNCMD_RC != 0)
 | 
			
		||||
    {
 | 
			
		||||
        my $msg = "Error processing csmconfig information\n";
 | 
			
		||||
        log_this($msg);
 | 
			
		||||
        print "$msg";
 | 
			
		||||
        close(STANZA);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $line (@results)
 | 
			
		||||
    {
 | 
			
		||||
        my $xcatline;
 | 
			
		||||
        $line =~ s/\s*//g;    #remove extra blanks
 | 
			
		||||
        my ($attr, $value) = split(/=/, $line);
 | 
			
		||||
        if ($attr eq "RemoteShell")
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if ($value)
 | 
			
		||||
            {
 | 
			
		||||
                $xcatline = "    rsh=";
 | 
			
		||||
                $xcatline .= "$value\n";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ($attr eq "RemoteCopyCmd")
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if ($value)
 | 
			
		||||
            {
 | 
			
		||||
                $xcatline = "    rcp=";
 | 
			
		||||
                $xcatline .= "$value\n";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ($xcatline)
 | 
			
		||||
        {
 | 
			
		||||
            write_stanza($xcatline);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    close(STANZA);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# runs lsnodes -l  and build node stanza file
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub getNodeinfo
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    # open the node stanza file
 | 
			
		||||
    my $stanzafile = "$directory/node.stanza";
 | 
			
		||||
    open(STANZA, ">$stanzafile")
 | 
			
		||||
      or die "Can't open $stanzafile for writing: $!";
 | 
			
		||||
    write_stanza("# <xCAT data object stanza file\n");
 | 
			
		||||
    log_this("Reading Node information\n");
 | 
			
		||||
    print "Running lsnode -l for node info!\n";
 | 
			
		||||
 | 
			
		||||
    my $OS       = "";
 | 
			
		||||
    my $GRP      = "";
 | 
			
		||||
    my $ARCH     = "";
 | 
			
		||||
    my $DISTNAME = "";
 | 
			
		||||
 | 
			
		||||
    my @results;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
    my $lsnodefile = "$directory/lsnodedebug.output";
 | 
			
		||||
 | 
			
		||||
    # use of file is for debug
 | 
			
		||||
    if (-e $lsnodefile)
 | 
			
		||||
    {    # use the imported file
 | 
			
		||||
        log_this("Reading $lsnodefile information\n");
 | 
			
		||||
        $cmd     = "cat $lsnodefile";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {    # run the command
 | 
			
		||||
        $cmd     = "/opt/csm/bin/lsnode -l";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    if ($::RUNCMD_RC != 0)
 | 
			
		||||
    {
 | 
			
		||||
        my $msg = "Error processing lsnode information\n";
 | 
			
		||||
        log_this($msg);
 | 
			
		||||
        print "$msg";
 | 
			
		||||
        close(STANZA);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    #  build hash  of lsnode info
 | 
			
		||||
    #
 | 
			
		||||
    my $output   = buildNodehash(\@results);
 | 
			
		||||
    my %nodehash = %$output;
 | 
			
		||||
    my %attrhash;
 | 
			
		||||
    my $nodename;
 | 
			
		||||
    my $attributes;
 | 
			
		||||
 | 
			
		||||
    # my $test = $nodehash{"c55n03.ppd.pok.ibm.com"}{"PowerStatus"};
 | 
			
		||||
 | 
			
		||||
    while (($nodename, $attributes) = each %nodehash)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        #
 | 
			
		||||
        # build commonly needed attributes
 | 
			
		||||
        #
 | 
			
		||||
        %attrhash = %$attributes;
 | 
			
		||||
 | 
			
		||||
        # get osname, distribution name for later
 | 
			
		||||
        $OS = $attrhash{"InstallOSName"};
 | 
			
		||||
        my $tmpname = $attrhash{"InstallDistributionName"};
 | 
			
		||||
        $DISTNAME = lc($tmpname);
 | 
			
		||||
        my $pkgarch = $attrhash{"InstallPkgArchitecture"};
 | 
			
		||||
        if ($pkgarch)
 | 
			
		||||
        {
 | 
			
		||||
            if ($OS eq "LINUX")
 | 
			
		||||
            {
 | 
			
		||||
                $ARCH = $pkgarch;    # save arch
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {                        #AIX
 | 
			
		||||
                $ARCH = "ppc64";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #
 | 
			
		||||
        # first process the nodename
 | 
			
		||||
        #
 | 
			
		||||
        my $value;
 | 
			
		||||
        my $xcatline;
 | 
			
		||||
        my $attr;
 | 
			
		||||
        my $grplist = get_groups($nodename);
 | 
			
		||||
        if (!(grep /compute/, $grplist))
 | 
			
		||||
        {
 | 
			
		||||
            $grplist .= ",compute";
 | 
			
		||||
        }
 | 
			
		||||
        if (!(grep /all/, $grplist))
 | 
			
		||||
        {
 | 
			
		||||
            $grplist .= ",all";
 | 
			
		||||
        }
 | 
			
		||||
        $GRP = $grplist;    # save for setting up other tables
 | 
			
		||||
        my $shortnodename = get_shortname($nodename);
 | 
			
		||||
        $xcatline = "$shortnodename:\n";    # write node name
 | 
			
		||||
        $xcatline .= "    objtype=node\n";
 | 
			
		||||
        if ($grplist)
 | 
			
		||||
        {
 | 
			
		||||
            $xcatline .= "    groups=$grplist\n";
 | 
			
		||||
            $xcatline .= "    profile=compute\n";
 | 
			
		||||
        }
 | 
			
		||||
        $xcatline .= "    status=defined\n";
 | 
			
		||||
 | 
			
		||||
        if ($xcatline)
 | 
			
		||||
        {
 | 
			
		||||
            write_stanza($xcatline);
 | 
			
		||||
            $xcatline = "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #now process all the attributes associated with the nodename
 | 
			
		||||
        #my $test = $attrhash{"InstallServer"};
 | 
			
		||||
        #my $test1 = $attrhash{"Mode"};
 | 
			
		||||
 | 
			
		||||
        while (($attr, $value) = each %$attributes)
 | 
			
		||||
        {
 | 
			
		||||
            #if ($attr eq "InstallServer")
 | 
			
		||||
            #{
 | 
			
		||||
             #   if ($value)
 | 
			
		||||
              #  {
 | 
			
		||||
               #     $xcatline = "    xcatmaster=$value\n";
 | 
			
		||||
                #    $xcatline .= "    servicenode=$value\n";
 | 
			
		||||
 | 
			
		||||
                #}
 | 
			
		||||
            #}
 | 
			
		||||
            # since we are suggesting that the xCAT MN is a different machine
 | 
			
		||||
            # than the CSM MS,  we will not use the Management Server value
 | 
			
		||||
            #if ($attr eq "ManagementServer")
 | 
			
		||||
            #{
 | 
			
		||||
 | 
			
		||||
            #   my $installserver = $attrhash{"InstallServer"};
 | 
			
		||||
            #    if ($installserver eq "")    # if no install server, use MN
 | 
			
		||||
            #    {
 | 
			
		||||
            #        if ($value)
 | 
			
		||||
            #        {
 | 
			
		||||
            #            $xcatline = "    xcatmaster=$value\n";
 | 
			
		||||
            #        }
 | 
			
		||||
            #    }
 | 
			
		||||
            #}
 | 
			
		||||
            if ($attr eq "InstallOSName")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    if ($value eq "AIX")
 | 
			
		||||
                    {
 | 
			
		||||
                        $xcatline = "    os=$value\n";
 | 
			
		||||
                        $xcatline .= "    arch=ppc64\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "InstallDistributionVersion")
 | 
			
		||||
            {
 | 
			
		||||
                if (   $value
 | 
			
		||||
                    && $DISTNAME)    # put together DistributeName and Version
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    os=$DISTNAME";
 | 
			
		||||
                    $xcatline .= "$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "InstallPkgArchitecture")    # filled in for Linux
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    if ($OS eq "LINUX")
 | 
			
		||||
                    {
 | 
			
		||||
                        $xcatline = "    arch=$value\n";
 | 
			
		||||
                        if ($value =~ /86/)
 | 
			
		||||
                        {
 | 
			
		||||
                            $xcatline .= "    netboot=pxe\n";
 | 
			
		||||
                        }
 | 
			
		||||
                        if ($value =~ /ppc/)
 | 
			
		||||
                        {
 | 
			
		||||
                            $xcatline .= "    netboot=yaboot\n";
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "HWControlPoint")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value) 
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    hcp=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "LParID")
 | 
			
		||||
            {
 | 
			
		||||
                if ($ARCH =~ /ppc/)
 | 
			
		||||
                {
 | 
			
		||||
                    if ($value)
 | 
			
		||||
                    {    # this is an LPAR
 | 
			
		||||
                        $xcatline = "    id=$value\n";
 | 
			
		||||
                        $xcatline .= "    hwtype=lpar\n";
 | 
			
		||||
                        $xcatline .= "    nodetype=ppc\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "ConsoleMethod")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    cons=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "ConsolePortNum")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    termport=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "PowerMethod")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    if ($value eq "xseries")
 | 
			
		||||
                    {
 | 
			
		||||
                        $value = "ipmi";
 | 
			
		||||
                    }
 | 
			
		||||
                    $xcatline = "    power=$value\n";
 | 
			
		||||
                    $xcatline .= "    mgt=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "InstallAdapterMacaddr")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    mac=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "HWSerialNum")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    serial=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "ConsoleSerialSpeed")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    serialspeed=$value\n";
 | 
			
		||||
                    $xcatline .= "    serialflow=hard\n";    # hardcoded
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "ConsoleSerialDevice")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    serialport=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "ConsoleServerName")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    termserver=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($xcatline)
 | 
			
		||||
            {
 | 
			
		||||
                write_stanza($xcatline);
 | 
			
		||||
                $xcatline = "";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $xcatline = "\n";
 | 
			
		||||
        write_stanza($xcatline);
 | 
			
		||||
        $xcatline = "";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    close(STANZA);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# runs lshwdev -l  stanza file and builds node stanza file for xCAT
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub getDevinfo
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    # open the node stanza file
 | 
			
		||||
    my $stanzafile = "$directory/device.stanza";
 | 
			
		||||
    open(STANZA, ">$stanzafile")
 | 
			
		||||
      or die "Can't open $stanzafile for writing: $!";
 | 
			
		||||
    write_stanza("# <xCAT data object stanza file\n");
 | 
			
		||||
 | 
			
		||||
    log_this("Reading Device information\n");
 | 
			
		||||
    print "Running lshwdev -l for device info!\n";
 | 
			
		||||
 | 
			
		||||
    my $MN;
 | 
			
		||||
    my $OS;
 | 
			
		||||
    my $hwmodel;
 | 
			
		||||
 | 
			
		||||
    my @results;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
    my $HWMODEL = "";
 | 
			
		||||
 | 
			
		||||
    # use of file is for debug
 | 
			
		||||
    my $lshwdevfile = "$directory/lshwdevdebug.output";
 | 
			
		||||
    if (-e $lshwdevfile)
 | 
			
		||||
    {    # use the imported file
 | 
			
		||||
        log_this("Reading $lshwdevfile information\n");
 | 
			
		||||
        $cmd     = "cat $lshwdevfile";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {    # run the command
 | 
			
		||||
        $cmd     = "/opt/csm/bin/lshwdev -l";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    if ($::RUNCMD_RC != 0)
 | 
			
		||||
    {
 | 
			
		||||
        my $msg = "Error processing lshwdev information\n";
 | 
			
		||||
        log_this($msg);
 | 
			
		||||
        print "$msg";
 | 
			
		||||
        close(STANZA);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    #  build hash  of lshwdev info
 | 
			
		||||
    #
 | 
			
		||||
    my $output   = buildNodehash(\@results);
 | 
			
		||||
    my %nodehash = %$output;
 | 
			
		||||
    my %attrhash;
 | 
			
		||||
    my $nodename;
 | 
			
		||||
    my $attributes;
 | 
			
		||||
 | 
			
		||||
    while (($nodename, $attributes) = each %nodehash)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        #
 | 
			
		||||
        # build commonly needed attributes
 | 
			
		||||
        #
 | 
			
		||||
        %attrhash = %$attributes;
 | 
			
		||||
        $HWMODEL  = $attrhash{"HWModel"};
 | 
			
		||||
 | 
			
		||||
        #
 | 
			
		||||
        # first process the devicename
 | 
			
		||||
        #
 | 
			
		||||
        my $value;
 | 
			
		||||
        my $xcatline;
 | 
			
		||||
        my $attr;
 | 
			
		||||
 | 
			
		||||
        my $grplist  = get_dev_groups($nodename);
 | 
			
		||||
        my $shortnodename = get_shortname($nodename);
 | 
			
		||||
        $xcatline = "$shortnodename:\n";    # write node name
 | 
			
		||||
        $xcatline .= "    objtype=node\n";
 | 
			
		||||
        if ($grplist)
 | 
			
		||||
        {
 | 
			
		||||
            $xcatline .= "    groups=$grplist\n";
 | 
			
		||||
        }
 | 
			
		||||
        $xcatline .= "    status=defined\n";
 | 
			
		||||
        if ($xcatline)
 | 
			
		||||
        {
 | 
			
		||||
            write_stanza($xcatline);
 | 
			
		||||
            $xcatline = "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #now process all the attributes associated with the device
 | 
			
		||||
        while (($attr, $value) = each %$attributes)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if ($attr eq "DeviceType")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    my $lcvalue = lc($value);
 | 
			
		||||
                    $xcatline = "    nodetype=ppc\n";
 | 
			
		||||
                    if ($lcvalue eq "hmc") {
 | 
			
		||||
                      $xcatline .= "    mgt=$lcvalue\n";
 | 
			
		||||
                      $xcatline .= "    hwtype=$lcvalue\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "HWType")    # put Model and type together
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    mtm=$HWMODEL";
 | 
			
		||||
                    $xcatline .= "-";
 | 
			
		||||
                    $xcatline .= "$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "HWSerialNum")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    serial=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "PhysicalLocation")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    room=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($attr eq "Macaddr")
 | 
			
		||||
            {
 | 
			
		||||
                if ($value)
 | 
			
		||||
                {
 | 
			
		||||
                    $xcatline = "    mac=$value\n";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ($xcatline)
 | 
			
		||||
            {
 | 
			
		||||
                write_stanza($xcatline);
 | 
			
		||||
                $xcatline = "";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $xcatline = "\n";
 | 
			
		||||
        write_stanza($xcatline);
 | 
			
		||||
        $xcatline = "";
 | 
			
		||||
    }
 | 
			
		||||
    close(STANZA);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# change to short hostname for xCAT
 | 
			
		||||
# if ip address, just return it
 | 
			
		||||
#
 | 
			
		||||
sub get_shortname
 | 
			
		||||
{
 | 
			
		||||
    my $hostname = shift();
 | 
			
		||||
 | 
			
		||||
    # if not ip address
 | 
			
		||||
    if ($hostname !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/)
 | 
			
		||||
    {
 | 
			
		||||
        my @shorthost = split(/\./, $hostname);
 | 
			
		||||
        return $shorthost[0];
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {    # return ip address
 | 
			
		||||
        return $hostname;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# get list of groups for input hostname
 | 
			
		||||
#
 | 
			
		||||
sub get_groups
 | 
			
		||||
{
 | 
			
		||||
    my $hostname = shift();
 | 
			
		||||
    my $grouplist;
 | 
			
		||||
    my @results;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
 | 
			
		||||
    # use of file is for debug
 | 
			
		||||
    my $groupfile = "$directory/nodegrpdebug.output";
 | 
			
		||||
    if (-e $groupfile)
 | 
			
		||||
    {    # use the imported file
 | 
			
		||||
        $cmd     = "cat $groupfile";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {    # run the command
 | 
			
		||||
        $cmd     = "/opt/csm/bin/nodegrp -s $hostname";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $line (@results)
 | 
			
		||||
    {
 | 
			
		||||
        $grouplist .= $line;
 | 
			
		||||
        $grouplist .= ",";
 | 
			
		||||
    }
 | 
			
		||||
    chop $grouplist;    # get rid of last comma
 | 
			
		||||
    return $grouplist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# get list of groups for input device
 | 
			
		||||
#
 | 
			
		||||
sub get_dev_groups
 | 
			
		||||
{
 | 
			
		||||
    my $devname = shift();
 | 
			
		||||
    my $grouplist;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
    my @results;
 | 
			
		||||
    my $hwgroupfile = "$directory/hwdevgrpdebug.output";
 | 
			
		||||
    if (-e $hwgroupfile)
 | 
			
		||||
    {    # use the imported file
 | 
			
		||||
        $cmd     = "cat $hwgroupfile";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {    # run the command
 | 
			
		||||
        $cmd     = "/opt/csm/bin/hwdevgrp -s $devname";
 | 
			
		||||
        @results = runcmd($cmd);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $line (@results)
 | 
			
		||||
    {
 | 
			
		||||
        $grouplist .= $line;
 | 
			
		||||
        $grouplist .= ",";
 | 
			
		||||
    }
 | 
			
		||||
    chop $grouplist;    # get rid of last comma
 | 
			
		||||
    return $grouplist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# build node hash.  Build a hash of hashes,  each entry
 | 
			
		||||
#   nodex=> {
 | 
			
		||||
#            attribute=>value
 | 
			
		||||
#            attribute=>value
 | 
			
		||||
#               .
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub buildNodehash
 | 
			
		||||
{
 | 
			
		||||
    my ($info) = @_;
 | 
			
		||||
    my @nodeinfo = @$info;
 | 
			
		||||
    my %nodehash;
 | 
			
		||||
    my $nodename;
 | 
			
		||||
    foreach my $line (@nodeinfo)
 | 
			
		||||
    {
 | 
			
		||||
        $line =~ s/\s*//g;    #remove extra blanks
 | 
			
		||||
        my ($attr, $value) = split(/=/, $line);
 | 
			
		||||
        if (($attr eq "Hostname") || ($attr eq "Name"))
 | 
			
		||||
        {
 | 
			
		||||
            $nodename = $value;    # set the hash key
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {                          # all other lines are part of hash
 | 
			
		||||
            $nodehash{$nodename}{$attr} = $value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return \%nodehash;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# runs the input command and handles the errors.   Returns the output
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
sub runcmd
 | 
			
		||||
{
 | 
			
		||||
    my ($cmd) = @_;
 | 
			
		||||
    my $rc = 0;
 | 
			
		||||
    $::RUNCMD_RC = 0;
 | 
			
		||||
    my $outref = [];
 | 
			
		||||
    @$outref = `$cmd`;
 | 
			
		||||
    if ($?)
 | 
			
		||||
    {
 | 
			
		||||
        $rc          = $? ;
 | 
			
		||||
        $::RUNCMD_RC = $rc;
 | 
			
		||||
        if ($rc > 0)
 | 
			
		||||
        {
 | 
			
		||||
            my $msg = "$cmd returned rc=$rc @$outref\n";
 | 
			
		||||
            log_this($msg);
 | 
			
		||||
            print "$msg";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    chomp(@$outref);
 | 
			
		||||
    return @$outref;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub usage
 | 
			
		||||
{
 | 
			
		||||
    print "CSM database to xCAT stanza files migration utility.\n";
 | 
			
		||||
    print
 | 
			
		||||
      "Reads the CSM database and creates xCAT stanza files that \ncan be imported using the chdef command into the xCAT database.\n";
 | 
			
		||||
    print "Usage:\n";
 | 
			
		||||
    print "\t--help - usage\n";
 | 
			
		||||
    print
 | 
			
		||||
      "\t--dir - output directory for stanza files.\n                      Default is /tmp/csm2xcat.\n";
 | 
			
		||||
    print "\n";
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user