From 704f03bcd0b07b6ae76b21fcb11f41e93843dc75 Mon Sep 17 00:00:00 2001 From: XuWei Date: Tue, 21 Jun 2016 22:47:35 -0400 Subject: [PATCH] Fix issue 980, add status powering-on --- perl-xCAT/xCAT/GlobalDef.pm | 11 ++++--- xCAT-server/lib/xcat/plugins/kvm.pm | 46 +++++++++++------------------ 2 files changed, 24 insertions(+), 33 deletions(-) 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 90fe46524..1775a558d 100755 --- a/xCAT-server/lib/xcat/plugins/kvm.pm +++ b/xCAT-server/lib/xcat/plugins/kvm.pm @@ -2997,6 +2997,9 @@ sub power { } } my $errstr; + my $newstat; + my %newnodestatus=(); + if ($subcommand eq 'on') { unless ($dom) { if ($use_xhrm) { @@ -3009,6 +3012,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 { @@ -3020,6 +3026,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"; } @@ -3028,6 +3035,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()) { @@ -3040,6 +3048,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) { @@ -3047,6 +3056,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"; @@ -3057,6 +3070,10 @@ sub power { } } + $newnodestatus{$newstat}=[$node]; + xCAT::Utils->filter_nostatusupdate(\%newnodestatus); + xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1); + unless ($retstring =~ /reset/) { $retstring = $retstring . getpowstate($dom); } @@ -3771,35 +3788,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); } }