Fix to set up NIM network defs correctly

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2988 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
nott 2009-03-25 14:58:46 +00:00
parent 11977ffba4
commit 8e3542248b

View File

@ -2551,8 +2551,8 @@ sub get_nim_attr_val
if ($::RUNCMD_RC != 0)
{
my $rsp;
push @{$rsp->{data}}, "Could not run lsnim command.\n";
# xCAT::MsgUtils->message("E", $rsp, $callback);
push @{$rsp->{data}}, "Could not run lsnim command: \'$cmd\'.\n";
xCAT::MsgUtils->message("E", $rsp, $callback);
return 1;
}
@ -2601,7 +2601,7 @@ sub get_res_loc {
if ($::RUNCMD_RC != 0)
{
my $rsp;
push @{$rsp->{data}}, "Could not run lsnim command.\n";
push @{$rsp->{data}}, "Could not run lsnim command: \'$cmd\'.\n";
xCAT::MsgUtils->message("E", $rsp, $callback);
return 1;
}
@ -3717,11 +3717,15 @@ sub prenimnodeset
}
}
# add the "xcataixpost" script to each image def for standalone systems
# add the "xcataixscript" script to each image def for standalone systems
foreach my $i (@image_names) {
if ( $imghash{$i}{nimtype} =~ /standalone/) {
# add it to the list of scripts for this image
$imghash{$i}{'script'} .= "xcataixpost";
if (defined($imghash{$i}{'script'}) ) {
$imghash{$i}{'script'} .= ",xcataixscript";
} else {
$imghash{$i}{'script'} .= "xcataixscript";
}
# also make sure to create the resource
$add_xcataixpost++;
@ -3775,26 +3779,26 @@ sub prenimnodeset
my $createscript=0;
# see if it already exists
my $scmd = qq~$pre /usr/sbin/lsnim -l 'xcataixpost' 2>/dev/null~;
my $scmd = qq~$pre /usr/sbin/lsnim -l 'xcataixscript' 2>/dev/null~;
xCAT::Utils->runcmd($scmd, 0);
if ($::RUNCMD_RC != 0) {
# doesn't exist so create it
$createscript=1;
} else {
# it exists so see if it's in the correct location
my $loc = &get_nim_attr_val('xcataixpost', 'location', $callback, $nimprime);
my $loc = &get_nim_attr_val('xcataixscript', 'location', $callback, $nimprime);
# see if it's in the wrong place
if ($loc eq "/install/postscripts/xcataixpost") {
# TODO - how handle migration????
if ($loc ne "/install/nim/scripts/xcataixscript") {
# need to remove this def and create a new one
$createscript=1;
my $rcmd = qq~$pre /usr/sbin/nim -Fo remove 'xcataixpost' 2>/dev/null~;
my $rcmd = qq~$pre /usr/sbin/nim -Fo remove 'xcataixscript' 2>/dev/null~;
xCAT::Utils->runcmd($rcmd, 0);
if ($::RUNCMD_RC != 0) {
# error - could not remove NIM xcataixpost script resource.
# error - could not remove NIM xcataixscript script resource.
}
}
}
@ -3802,27 +3806,27 @@ sub prenimnodeset
# create a new one if we need to
if ($createscript) {
# copy file to /install/nim/scripts
my $ccmd = qq~$pre mkdir -m 644 -p /install/nim/scripts; cp /install/postscripts/xcataixpost /install/nim/scripts 2>/dev/null; chmod +x /install/nim/scripts/xcataixpost~;
my $ccmd = qq~$pre mkdir -m 644 -p /install/nim/scripts; cp /install/postscripts/xcataixscript /install/nim/scripts 2>/dev/null; chmod +x /install/nim/scripts/xcataixscript~;
xCAT::Utils->runcmd($ccmd, 0);
if ($::RUNCMD_RC != 0) {
my $rsp;
push @{$rsp->{data}}, "Could not copy xcataixpost.";
push @{$rsp->{data}}, "Could not copy xcataixscript.";
xCAT::MsgUtils->message("E", $rsp, $callback);
return 1;
}
# define the new xcataixpost resource
my $dcmd = qq~$pre /usr/sbin/nim -o define -t script -a server=master -a location=/install/nim/scripts/xcataixpost xcataixpost 2>/dev/null~;
# define the xcataixscript resource
my $dcmd = qq~$pre /usr/sbin/nim -o define -t script -a server=master -a location=/install/nim/scripts/xcataixscript xcataixscript 2>/dev/null~;
xCAT::Utils->runcmd($dcmd, 0);
if ($::RUNCMD_RC != 0) {
my $rsp;
push @{$rsp->{data}}, "Could not create a NIM resource for xcataixpost.\n";
push @{$rsp->{data}}, "Could not create a NIM resource for xcataixscript.\n";
xCAT::MsgUtils->message("E", $rsp, $callback);
return (1);
}
}
# make sure we clean up the /etc/exports file
# make sure we clean up the /etc/exports file of old post script
my $ecmd = qq~$pre /usr/sbin/rmnfsexp -d /install/postscripts/xcataixpost -B 2>/dev/null~;
xCAT::Utils->runcmd($ecmd, 0);
@ -3850,6 +3854,7 @@ sub prenimnodeset
# defined locally when this cmd runs there
#
######################################################
if (&doSNcopy($callback, \@nodelist, $nimprime, \@nimrestypes, \%imghash, \%lochash, \%nodeosi)) {
my $rsp;
push @{$rsp->{data}}, "Could not copy NIM resources to the xCAT service nodes.\n";
@ -4041,7 +4046,7 @@ sub copyres
my $FSname = $fslist[7];
# How much space is the resource using?
my $ducmd = "/usr/bin/du -sm $dir | /usr/bin/awk '{print \$1}'";
my $ducmd = qq~xdsh $dest /usr/bin/du -sm $dir | /usr/bin/awk '{print \$1}'~;
my $reqsize = xCAT::Utils->runcmd("$ducmd", -1);
if ($::RUNCMD_RC != 0) {
@ -4207,7 +4212,6 @@ sub doSNcopy
#
my @nimresources;
foreach my $snkey (keys %$sn) {
if (!&is_me($snkey) ) {
# running on the management node so
@ -4893,7 +4897,7 @@ sub checkNIMnetworks
my @result = xCAT::Utils->runcmd("$cmd", -1);
if ($::RUNCMD_RC != 0) {
my $rsp;
push @{$rsp->{data}}, "Could not run lsnim command.\n";
push @{$rsp->{data}}, "Could not run lsnim command: \'$cmd\'.\n";
xCAT::MsgUtils->message("E", $rsp, $callback);
return 1;
}
@ -4902,9 +4906,9 @@ sub checkNIMnetworks
# skip comment lines
next if ($l =~ /^\s*#/);
my ($nimname, $net_addr, $snm) = split(':');
$NIMnets{$nimname}{'net_addr'} = $net_addr;
$NIMnets{$nimname}{'snm'} = $snm;
my ($nimname, $net_addr, $snm) = split(':', $l);
$NIMnets{$netwk}{'net_addr'} = $net_addr;
$NIMnets{$netwk}{'snm'} = $snm;
}
}
@ -4913,14 +4917,27 @@ sub checkNIMnetworks
#
foreach my $node (@nodelist) {
# see if the NIM net we need is defined
# split node mask
my ($nm1, $nm2, $nm3, $nm4) = split('\.', $nethash{$node}{mask});
# split node net addr
my ($nn1, $nn2, $nn3, $nn4) = split('\.', $nethash{$node}{net});
my $foundmatch=0;
# foreach nim network name
foreach my $netwk (@networks) {
# split definition mask
my ($dm1, $dm2, $dm3, $dm4) = split('\.', $NIMnets{$netwk}{'snm'});
# split definition net addr
my ($dn1, $dn2, $dn3, $dn4) = split('\.', $NIMnets{$netwk}{'net_addr'});
# check for the same netmask and network address
if (($nethash{$node}{net} eq $NIMnets{$netwk}{net_addr}) && ($nethash{$node}{mask} eq $NIMnets{$netwk}{snm}) ) {
$foundmatch=1;
if ( ($nn1 == $dn1) && ($nn2 ==$dn2) && ($nn3 == $dn3) && ($nn4 == $dn4) ) {
if ( ($nm1 == $dm1) && ($nm2 ==$dm2) && ($nm3 == $dm3) && ($nm4 == $dm4) ) {
$foundmatch=1;
}
}
}
@ -5111,6 +5128,39 @@ sub make_SN_resource
my $nimprime = &getnimprime();
chomp $nimprime;
#
# Install/config NIM master if needed
#
my $lsnimcmd = "/usr/sbin/lsnim -l >/dev/null 2>&1";
my $out = xCAT::Utils->runcmd("$lsnimcmd", -1);
if ($::RUNCMD_RC != 0) {
# then we need to configure NIM on this node
if ($::VERBOSE) {
my $rsp;
push @{$rsp->{data}}, "Configuring NIM.\n";
xCAT::MsgUtils->message("I", $rsp, $callback);
}
# NIM filesets should already be installed on the service node
my $nimcmd = "nim_master_setup -a mk_resource=no";
if ($::VERBOSE) {
my $rsp;
push @{$rsp->{data}}, "Running: \'$nimcmd\'\n";
xCAT::MsgUtils->message("I", $rsp, $callback);
}
my $nimout = xCAT::Utils->runcmd("$nimcmd", -1);
if ($::RUNCMD_RC != 0) {
my $rsp;
push @{$rsp->{data}}, "Could not install and configure NIM.\n";
if ($::VERBOSE) {
push @{$rsp->{data}}, "$nimout";
}
xCAT::MsgUtils->message("E", $rsp, $callback);
return 1;
}
}
# make sure we have the NIM networks defs etc we need for these nodes
if (&checkNIMnetworks($callback, \@nodelist, \%nethash) != 0) {
return 1;