add persistent odm support to AIX statelite

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@8774 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
nott 2011-01-30 18:44:21 +00:00
parent 0b6c2347ca
commit 28b3352148

View File

@ -1492,6 +1492,7 @@ srvnode.";
return 0;
}
#----------------------------------------------------------------------------
=head3 chkosimage
@ -5882,7 +5883,7 @@ sub update_dd_boot
{
# only update if it has not been done yet
my $cmd = "cat $dd_boot_file_mn | grep 'xCAT support'";
my $cmd = "cat $dd_boot_file_mn | grep 'xCAT basecust support'";
my @result = xCAT::Utils->runcmd("$cmd", -1);
if ($::RUNCMD_RC != 0)
{
@ -5893,10 +5894,70 @@ sub update_dd_boot
xCAT::MsgUtils->message("I", $rsp, $callback);
}
my $patch =
qq~\n\t# xCAT support - 1\n\tif [ -z "\$(odmget -qattribute=syscons CuAt)" ] \n\tthen\n\t \${SHOWLED} 0x911\n\t cp /usr/ODMscript /tmp/ODMscript\n\t [ \$? -eq 0 ] && odmadd /tmp/ODMscript\n\tfi \n\n~;
my $odmrestore =qq~\n
# xCAT basecust support #1
# when using a shared_root we need to see if there is a persistent
# /etc/basecust file available. If we have one we need to
# restore it. This will restore anything previously
# saved in the ODM.
if [ -n "\${NIM_SHARED_ROOT}" ]
then
# Get the name of the server and the name of the persistent
# directory to mount
# - /mnt is the shared_root dir at this point
# - the statelite.table file has entries like:
# "compute04|10.2.0.200|/nodedata"
if [ -f "/mnt/statelite.table" ]
then
# make sure we have the commands we need
cp /SPOT/usr/bin/cat /usr/bin
cp /SPOT/usr/bin/awk /usr/bin
cp /SPOT/usr/bin/grep /usr/bin
my $scripthook = qq~\n\t# xCAT support - 2\n\t# do statelite setup if needed\n\t/aixlitesetup\n\n~;
# statelite entry for this node
SLLINE=`/usr/bin/cat /mnt/statelite.table | /usr/bin/grep \${NIM_NAME}`
# the statelite server
SLSERV=`echo \$SLLINE | /usr/bin/awk -F'|' '{print \$2}'`
# statelite directory to mount
SLDIR=`echo \$SLLINE | /usr/bin/awk -F'|' '{print \$3}'`
mount \${SLSERV}:\${SLDIR} /tmp
# - get the persistent version of basecust from the server
if [ -f /tmp/\${NIM_NAME}/etc/basecust ]; then
cp -p /tmp/\${NIM_NAME}/etc/basecust /etc
cp /SPOT/usr/lib/boot/restbase /usr/sbin
cp /SPOT/usr/bin/uncompress /usr/bin
fi
umount /tmp
fi
fi
\n\n~;
my $mntbase=qq~
# xCAT basecust support #2
if [ -n "\${NIM_SHARED_ROOT}" ]
then
# if we found a statelite directory - above
if [ -n "\${SLDIR}" ]
then
# need to mount persistent basecust over the one in RAM FS
mount -o rw \${SLSERV}:\${SLDIR} /tmp
/usr/bin/touch /etc/basecust
mount /tmp/\${NIM_NAME}/etc/basecust /etc/basecust
fi
fi \n\n~;
my $patch =
qq~\n\t# xCAT support #3\n\tif [ -z "\$(odmget -qattribute=syscons CuAt)" ] \n\tthen\n\t \${SHOWLED} 0x911\n\t cp /usr/ODMscript /tmp/ODMscript\n\t [ \$? -eq 0 ] && odmadd /tmp/ODMscript\n\tfi \n\n~;
my $scripthook = qq~
# xCAT support #4
# do statelite setup if needed
cp /../SPOT/niminfo /etc/niminfo
/aixlitesetup
\n\n~;
if (open(DDBOOT, "<$dd_boot_file_mn"))
{
@ -5936,20 +5997,26 @@ sub update_dd_boot
{
$dontupdate = 1;
}
if (($l =~ /network boot phase 1/)) {
# add /etc/basecust to restore
print DDBOOT $odmrestore;
}
if (($l =~ /configure paging - local or NFS network/)) {
# make basecust persistent
print DDBOOT $mntbase;
}
if (($l =~ /0x620/) && (!$dontupdate))
{
# add the patch
# add the patch to set the console
print DDBOOT $patch;
}
if (($l =~ /configure nfso option/) && (!$dontupdate)) {
# add the aixlitesetup hook
if (($l =~ /Copy the local_domain file to/) && (!$dontupdate)) {
# add the aixlitesetup hook for xCAT statelite support
print DDBOOT $scripthook;
}
print DDBOOT $l;
}
close(DDBOOT);
}
else
{
@ -6879,6 +6946,10 @@ sub prenimnodeset
{
# must be diskless or dataless so update spot
my $rsp;
push @{$rsp->{data}}, "Updating the spot named \'$i\'.\n";
xCAT::MsgUtils->message("I", $rsp, $callback);
my $rc = &updatespot($i, \%imghash, \@nodelist, $callback, $subreq);
if ($rc != 0)
{
@ -8079,7 +8150,11 @@ sub mkdsklsnode
push @{$rsp->{data}}, "$Sname: Creating NIM node definition.\n";
#push @{$rsp->{data}}, "Running: \'$defcmd\'\n";
xCAT::MsgUtils->message("I", $rsp, $callback);
}
} else {
my $rsp;
push @{$rsp->{data}}, "$Sname: Creating NIM client definition \'$nim_name.\'\n";
xCAT::MsgUtils->message("I", $rsp, $callback);
}
$output = xCAT::Utils->runcmd("$defcmd", -1);
if ($::RUNCMD_RC != 0)
{
@ -8208,9 +8283,10 @@ sub mkdsklsnode
my $time = `date | cut -f5 -d' '`;
chomp $time;
my $rsp;
push @{$rsp->{data}},
"$Sname: Initializing NIM machine \'$nim_name\'. This could take a while.\n";
push @{$rsp->{data}}, "$Sname: Initializing NIM machine \'$nim_name\'. \n";
xCAT::MsgUtils->message("I", $rsp, $callback);
$output = xCAT::Utils->runcmd("$initcmd", -1);
if ($::RUNCMD_RC != 0)
@ -8855,12 +8931,17 @@ sub make_SN_resource
my $cmd;
my $SNname = xCAT::InstUtils->myxCATname();
my $SNname = "";
$SNname = xCAT::InstUtils->myxCATname();
chomp $SNname;
my $nimprime = xCAT::InstUtils->getnimprime();
chomp $nimprime;
my $rsp;
push @{$rsp->{data}}, "Checking NIM resources on $SNname.\n";
xCAT::MsgUtils->message("I", $rsp, $callback);
#
# Install/config NIM master if needed
#