diff --git a/perl-xCAT/xCAT/GlobalDef.pm b/perl-xCAT/xCAT/GlobalDef.pm index 872433cb8..31bf9de71 100644 --- a/perl-xCAT/xCAT/GlobalDef.pm +++ b/perl-xCAT/xCAT/GlobalDef.pm @@ -48,6 +48,7 @@ $::STATUS_INSTALLED="installed"; $::STATUS_BOOTING="booting"; $::STATUS_NETBOOTING="netbooting"; $::STATUS_BOOTED="booted"; +$::STATUS_POWERING_ON="powering-on"; $::STATUS_POWERING_OFF="powering-off"; $::STATUS_DISCOVERING="discovering"; $::STATUS_CONFIGURING="configuring"; @@ -65,6 +66,7 @@ $::STATUS_BMCREADY="bmcready"; $::STATUS_BOOTING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_BOOTED=>1, + $::STATUS_POWERING_ON=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_DISCOVERING=>1, $::STATUS_CONFIGURING=>1, @@ -82,7 +84,7 @@ $::STATUS_BMCREADY="bmcready"; #defined->[discovering]->[configuring]->[standingby]->installing->[installed]->booting->alive, defined->[discovering]->[configuring]-[standingby]->netbooting->booted->alive, alive/unreachable->booting->alive, powering-off->unreachable, alive->unreachable %::NEXT_NODESTAT_VAL=( - $::STATUS_DEFINED=>{$::STATUS_DISCOVERING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_BOOTING=>1, $::STATUS_CONFIGURING=>1}, + $::STATUS_DEFINED=>{$::STATUS_DISCOVERING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_POWERING_ON=>1, $::STATUS_BOOTING=>1, $::STATUS_CONFIGURING=>1}, $::STATUS_DISCOVERING=>{$::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_CONFIGURING=>1, $::STATUS_BOOTING=>1}, $::STATUS_CONFIGURING=>{$::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_STANDING_BY=>1}, $::STATUS_INSTALLING =>{$::STATUS_INSTALLED=>1, $::STATUS_BOOTING=>1}, @@ -90,9 +92,10 @@ $::STATUS_BMCREADY="bmcready"; $::STATUS_BOOTING=>{$::STATUS_BOOTED=>1, $::STATUS_ACTIVE=>1, $::STATUS_INACTIVE=>1}, $::STATUS_NETBOOTING=>{$::STATUS_BOOTED=>1}, $::STATUS_BOOTED=>{$::STATUS_ACTIVE=>1, $::STATUS_INACTIVE=>1}, - $::STATUS_ACTIVE=>{$::STATUS_INACTIVE=>1, $::STATUS_DISCOVERING=>1, $::STATUS_CONFIGURING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_BOOTING=>1}, - $::STATUS_INACTIVE=>{$::STATUS_ACTIVE=>1, $::STATUS_DISCOVERING=>1, $::STATUS_CONFIGURING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_BOOTING=>1}, - $::STATUS_POWERING_OFF=>{$::STATUS_INACTIVE=>1} + $::STATUS_ACTIVE=>{$::STATUS_INACTIVE=>1, $::STATUS_DISCOVERING=>1, $::STATUS_CONFIGURING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_POWERING_ON=>1}, + $::STATUS_INACTIVE=>{$::STATUS_ACTIVE=>1, $::STATUS_DISCOVERING=>1, $::STATUS_CONFIGURING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_POWERING_ON=>1}, + $::STATUS_POWERING_OFF=>{$::STATUS_INACTIVE=>1}, + $::STATUS_POWERING_ON=>{$::STATUS_BOOTED=>1} ); diff --git a/xCAT-server/lib/xcat/plugins/kvm.pm b/xCAT-server/lib/xcat/plugins/kvm.pm index 5c0aee544..50e2d40d0 100755 --- a/xCAT-server/lib/xcat/plugins/kvm.pm +++ b/xCAT-server/lib/xcat/plugins/kvm.pm @@ -3000,6 +3000,9 @@ sub power { } } my $errstr; + my $newstat; + my %newnodestatus=(); + if ($subcommand eq 'on') { unless ($dom) { if ($use_xhrm) { @@ -3012,6 +3015,9 @@ sub power { #this worked before I started doing the offline xml store because every rpower on tried to rebuild ($dom, $errstr) = makedom($node, $cdloc); if ($errstr) { return (1, $errstr); } + else { + $newstat = $::STATUS_POWERING_ON; + } } elsif (not $dom->is_active()) { $dom->create(); } else { @@ -3023,6 +3029,7 @@ sub power { $updatetable->{kvm_nodedata}->{$node}->{xml} = $newxml; if ($dom->is_active()) { $dom->destroy(); + $newstat=$::STATUS_POWERING_OFF; } undef $dom; } else { $retstring .= "$status_noop"; } @@ -3031,6 +3038,7 @@ sub power { my $newxml = $dom->get_xml_description(); $updatetable->{kvm_nodedata}->{$node}->{xml} = $newxml; $dom->shutdown(); + $newstat=$::STATUS_POWERING_OFF; } else { $retstring .= "$status_noop"; } } elsif ($subcommand eq 'reset') { if ($dom && $dom->is_active()) { @@ -3043,6 +3051,7 @@ sub power { $updatetable->{kvm_nodedata}->{$node}->{xml} = $newxml; my $persist = $dom->is_persistent(); $dom->destroy(); + $newstat=$::STATUS_POWERING_OFF; if ($persist) { $dom->undefine(); } undef $dom; if ($use_xhrm) { @@ -3050,6 +3059,10 @@ sub power { } ($dom, $errstr) = makedom($node, $cdloc, $newxml); if ($errstr) { return (1, $errstr); } + else { + $newstat=$::STATUS_POWERING_ON; + } + } else { #no changes, just restart the domain TODO when possible, stupid lack of feature... } $retstring .= "reset"; @@ -3060,6 +3073,10 @@ sub power { } } + $newnodestatus{$newstat}=[$node]; + xCAT::Utils->filter_nostatusupdate(\%newnodestatus); + xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1); + unless ($retstring =~ /reset/) { $retstring = $retstring . getpowstate($dom); } @@ -3774,35 +3791,6 @@ sub process_request { } #print "oldstatus:" . Dumper(\%oldnodestatus); - - #set the new status to the nodelist.status - my %newnodestatus = (); - my $newstat; - if (($subcommand eq 'off') || ($subcommand eq 'softoff')) { - my $newstat = $::STATUS_POWERING_OFF; - $newnodestatus{$newstat} = \@allnodes; - } else { - - #get the current nodeset stat - if (@allnodes > 0) { - my $nsh = {}; - my ($ret, $msg) = xCAT::SvrUtils->getNodesetStates(\@allnodes, $nsh); - if (!$ret) { - foreach (keys %$nsh) { - my $newstat = xCAT_monitoring::monitorctrl->getNodeStatusFromNodesetState($_, "rpower"); - $newnodestatus{$newstat} = $nsh->{$_}; - } - } else { - $callback->({ data => $msg }); - } - } - } - - #donot update node provision status (installing or netbooting) here - xCAT::Utils->filter_nostatusupdate(\%newnodestatus); - - #print "newstatus" . Dumper(\%newnodestatus); - xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1); } }