From 62be0d257e8762c1f954eafc555100d0d9c62bf1 Mon Sep 17 00:00:00 2001 From: nott Date: Thu, 30 Sep 2010 17:31:08 +0000 Subject: [PATCH] fix SN cleanup in mknimimage git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@7737 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/aixinstall.pm | 253 ++++++++++++--------- 1 file changed, 151 insertions(+), 102 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/aixinstall.pm b/xCAT-server/lib/xcat/plugins/aixinstall.pm index 8ad9da37b..6fd01ce89 100644 --- a/xCAT-server/lib/xcat/plugins/aixinstall.pm +++ b/xCAT-server/lib/xcat/plugins/aixinstall.pm @@ -1137,6 +1137,8 @@ sub spot_updates my $spot_name = $image_name; chomp $spot_name; + my $SRname = $imagedef{$image_name}{shared_root}; + my @allservers; # list of all service nodes # @@ -1222,9 +1224,9 @@ sub spot_updates # get list of SPOTS my $lscmd = qq~/usr/sbin/lsnim -t spot | /usr/bin/cut -f1 -d' ' ~; - my @spots = - xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $srvnode, - $lscmd, 1); + + + my $spotlist = xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $srvnode, $lscmd, 0); if ($::RUNCMD_RC != 0) { my $rsp; @@ -1234,15 +1236,13 @@ srvnode."; return 1; } - # see if spot defined - if (!grep(/$spot_name$/, @spots)) - { + my @SNspots; + foreach my $line ( split(/\n/, $spotlist )) { + $line =~ s/$srvnode:\s+//; + push(@SNspots, $line); + } - # if not then check the next one - next; - } - else - { + if (grep(/$spot_name$/, @SNspots)) { # ok - spot is defined on this SN # - see if the spot is allocated @@ -1255,7 +1255,7 @@ srvnode."; my $rsp; push @{$rsp->{data}}, - "The resource named \'$spot_name\' is currently allocated on service node \'$srvnode\'.\n"; + "The resource named \'$spot_name\' is currently allocated on service node \'$srvnode\' and cannot be removed.\n"; xCAT::MsgUtils->message("E", $rsp, $callback); return 1; } @@ -1430,17 +1430,18 @@ srvnode."; { foreach my $sn (@SNlist) { - # remove the spot if ($::VERBOSE) { my $rsp; $rsp->{data}->[0] = - "Removing SPOT \'$spot_name\' on service node $sn.\n"; + "Removing SPOT \'$spot_name\' on service node $sn. This could take a while.\n"; xCAT::MsgUtils->message("I", $rsp, $callback); } my $rmcmd = qq~nim -o remove $spot_name 2>/dev/null~; +#ndebug + my $nout = xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $sn, $rmcmd, 0); if ($::RUNCMD_RC != 0) @@ -1450,8 +1451,43 @@ srvnode."; "Could not remove $spot_name from service node $sn.\n"; xCAT::MsgUtils->message("E", $rsp, $callback); } + + + # if there is a shared_root then remove that also + # - see if the shared_root exist and if it is allocated + my $alloc_count = xCAT::InstUtils->get_nim_attr_val($SRname, "alloc_count", $callback, $sn, $subreq); + + if (defined($alloc_count)) { # then the res exists + if ($alloc_count != 0) { + my $rsp; + push @{$rsp->{data}}, "The resource named \'$SRname\' is currently allocated on service node \'$sn\' and cannot be removed.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + } + else + { + + # shared_root exists and is not allocated + # so it can be removed + if ($::VERBOSE) + { + my $rsp; + $rsp->{data}->[0] = + "Removing shared_root \'$SRname\' on service node $sn.\n"; + xCAT::MsgUtils->message("I", $rsp, $callback); + } + + my $rmcmd = qq~nim -o remove $SRname 2>/dev/null~; + my $nout = xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $sn, $rmcmd, 0); + if ($::RUNCMD_RC != 0) + { + my $rsp; + push @{$rsp->{data}}, "Could not remove \'$SRname\' from service node $sn.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + } + } + } } - } + } # end UPDATE return 0; } @@ -9846,81 +9882,85 @@ sub update_spot_sw # use xcatchroot to install sw in SPOT on nimprime. - # install installp with file first. - my $rc = update_spot_installp($callback, $chroot_lpploc, $tmp_installp, - $iflags, $spotname, $nimprime, $subreq); - if ($rc) - { - #failed to update installp - return 1; - } + # install installp with file first. + if (defined($tmp_installp) ) { + my $rc = update_spot_installp($callback, $chroot_lpploc, $tmp_installp, $iflags, $spotname, $nimprime, $subreq); + if ($rc) + { + #failed to update installp + return 1; + } - # remove tmp file - my $cmd = qq~/usr/bin/rm -f $tmp_installp~; + # remove tmp file + my $cmd = qq~/usr/bin/rm -f $tmp_installp~; - my $output = - xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0); + my $output = + xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0); - if ($::RUNCMD_RC != 0) - { - my $rsp; - push @{$rsp->{data}}, - "Could not run command: $cmd.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return 1; - } + if ($::RUNCMD_RC != 0) + { + my $rsp; + push @{$rsp->{data}}, + "Could not run command: $cmd.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return 1; + } - # - run updtvpkg to make sure installp software - # is registered with rpm - # - $cmd = qq~$::XCATROOT/bin/xcatchroot -i $spotname "/usr/sbin/updtvpkg"~; + # - run updtvpkg to make sure installp software + # is registered with rpm + # + $cmd = qq~$::XCATROOT/bin/xcatchroot -i $spotname "/usr/sbin/updtvpkg"~; - $output = - xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0); + $output = + xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0); - if ($::RUNCMD_RC != 0) - { - my $rsp; - push @{$rsp->{data}}, - "Could not run command: $cmd.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return 1; - } + if ($::RUNCMD_RC != 0) + { + my $rsp; + push @{$rsp->{data}}, + "Could not run command: $cmd.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return 1; + } - # then to install RPMs. - unless (open(RFILE, "<$tmp_rpm")) - { - my $rsp; - push @{$rsp->{data}}, "Could not open $tmp_rpm for reading.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return 1; - } + } - my @rlist = ; - close(RFILE); + # then to install RPMs. + if (defined($tmp_rpm) ) { + unless (open(RFILE, "<$tmp_rpm")) + { + my $rsp; + push @{$rsp->{data}}, "Could not open $tmp_rpm for reading.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return 1; + } + + my @rlist = ; + close(RFILE); - $rc = update_spot_rpm($callback, $chroot_rpmloc, \@rlist, + my $rc = update_spot_rpm($callback, $chroot_rpmloc, \@rlist, $rflags, $spotname, $nimprime, $subreq); - if ($rc) - { - #failed to update RPM - return 1; - } + if ($rc) + { + #failed to update RPM + return 1; + } - # remove tmp file - $cmd = qq~/usr/bin/rm -f $tmp_rpm~; + # remove tmp file + my $cmd = qq~/usr/bin/rm -f $tmp_rpm~; - $output = - xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0); + my $output = + xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0); - if ($::RUNCMD_RC != 0) - { - my $rsp; - push @{$rsp->{data}}, - "Could not run command: $cmd.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return 1; - } + if ($::RUNCMD_RC != 0) + { + my $rsp; + push @{$rsp->{data}}, + "Could not run command: $cmd.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return 1; + } + } } } @@ -10227,6 +10267,7 @@ sub sync_spot_files sub parse_installp_bundle { + my $callback = shift; my $bndfile = shift; @@ -10265,34 +10306,42 @@ sub parse_installp_bundle my $tmp_installp = "/tmp/tmp_installp"; my $tmp_rpm = "/tmp/tmp_rpm"; - unless (open(IFILE, ">$tmp_installp")) - { - my $rsp; - push @{$rsp->{data}}, "Could not open $tmp_installp for writing.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return 1; - } + if ( scalar @ilist) { + unless (open(IFILE, ">$tmp_installp")) + { + my $rsp; + push @{$rsp->{data}}, "Could not open $tmp_installp for writing.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return 1; + } - foreach (@ilist) - { - print IFILE $_ . "\n"; - } - close(IFILE); + foreach (@ilist) + { + print IFILE $_ . "\n"; + } + close(IFILE); + } else { + $tmp_installp=undef; + } - # put rpm list into tmp file - unless (open(RFILE, ">$tmp_rpm")) - { - my $rsp; - push @{$rsp->{data}}, "Could not open $tmp_rpm for writing.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return 1; - } + if ( scalar @rlist) { + # put rpm list into tmp file + unless (open(RFILE, ">$tmp_rpm")) + { + my $rsp; + push @{$rsp->{data}}, "Could not open $tmp_rpm for writing.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return 1; + } - foreach (@rlist) - { - print RFILE $_ . "\n"; - } - close(RFILE); + foreach (@rlist) + { + print RFILE $_ . "\n"; + } + close(RFILE); + } else { + $tmp_rpm=undef; + } return ($tmp_installp, $tmp_rpm);