diff --git a/perl-xCAT/xCAT/DiscoveryUtils.pm b/perl-xCAT/xCAT/DiscoveryUtils.pm index 0cbcffa77..e5c17cfca 100644 --- a/perl-xCAT/xCAT/DiscoveryUtils.pm +++ b/perl-xCAT/xCAT/DiscoveryUtils.pm @@ -9,6 +9,31 @@ $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; use xCAT::MsgUtils; +sub is_findme_request { + my ($request) = @_; + + return 0 unless ref $request eq 'HASH'; + return 0 unless ref $request->{command} eq 'ARRAY'; + return 0 unless defined $request->{command}->[0]; + return $request->{command}->[0] eq 'findme'; +} + +sub findme_request_for_handler { + my ($request) = @_; + + return unless is_findme_request($request); + return [$request]; +} + +sub findme_request_is_claimed { + my ($request) = @_; + + return 0 unless is_findme_request($request); + return 0 unless ref $request->{discoverymethod} eq 'ARRAY'; + return 0 unless defined $request->{discoverymethod}->[0]; + return $request->{discoverymethod}->[0] ne 'undef'; +} + =head3 update_discovery_data Update the discovery data from the xcat request to discoverydata table to indicate the discovery events arg1 - the request diff --git a/xCAT-server/lib/perl/xCAT/BladeUtils.pm b/xCAT-server/lib/perl/xCAT/BladeUtils.pm index bcd097859..fd2fef6f2 100644 --- a/xCAT-server/lib/perl/xCAT/BladeUtils.pm +++ b/xCAT-server/lib/perl/xCAT/BladeUtils.pm @@ -3,16 +3,6 @@ package xCAT::BladeUtils; use strict; use warnings; -sub findme_request_for_handler { - my ($request) = @_; - - return unless ref $request eq 'HASH'; - return unless ref $request->{command} eq 'ARRAY'; - return unless defined $request->{command}->[0]; - return unless $request->{command}->[0] eq 'findme'; - return [$request]; -} - sub blade_nodes_from_mp { my @entries = @_; my %hwtype; diff --git a/xCAT-server/lib/xcat/plugins/blade.pm b/xCAT-server/lib/xcat/plugins/blade.pm index f36e38a97..a13604c53 100644 --- a/xCAT-server/lib/xcat/plugins/blade.pm +++ b/xCAT-server/lib/xcat/plugins/blade.pm @@ -21,6 +21,7 @@ use Thread qw(yield); use xCAT::Utils; use xCAT::TableUtils; use xCAT::BladeUtils; +use xCAT::DiscoveryUtils; use xCAT::NetworkUtils; use xCAT::ServiceNodeUtils; use xCAT::PasswordUtils; @@ -4144,7 +4145,7 @@ sub preprocess_request { #if ($request->{_xcatdest}) { return [$request]; } #exit if preprocessed my $findme_request = - xCAT::BladeUtils::findme_request_for_handler($request); + xCAT::DiscoveryUtils::findme_request_for_handler($request); if ($findme_request) { return $findme_request; } if ($request->{_xcatpreprocessed}->[0] == 1) { return [$request]; } my $callback = shift; @@ -4472,8 +4473,8 @@ sub process_request { } } } - if ($request->{command}->[0] eq "findme") { - if (defined($request->{discoverymethod}) and defined($request->{discoverymethod}->[0]) and ($request->{discoverymethod}->[0] ne 'undef')) { + if (xCAT::DiscoveryUtils::is_findme_request($request)) { + if (xCAT::DiscoveryUtils::findme_request_is_claimed($request)) { # The findme request had been processed by other module, just return return; @@ -6252,6 +6253,3 @@ sub genhwtree - - - diff --git a/xCAT-server/lib/xcat/plugins/hpblade.pm b/xCAT-server/lib/xcat/plugins/hpblade.pm index 81c8a6299..aceb5d430 100644 --- a/xCAT-server/lib/xcat/plugins/hpblade.pm +++ b/xCAT-server/lib/xcat/plugins/hpblade.pm @@ -19,6 +19,8 @@ use strict; use xCAT::Table; use xCAT::Utils; use xCAT::TableUtils; +use xCAT::BladeUtils; +use xCAT::DiscoveryUtils; use xCAT::ServiceNodeUtils; use xCAT::Usage; use IO::Socket; @@ -308,6 +310,9 @@ sub preprocess_request { my $request = shift; #if ($request->{_xcatdest}) { return [$request]; } #exit if preprocessed + my $findme_request = + xCAT::DiscoveryUtils::findme_request_for_handler($request); + if ($findme_request) { return $findme_request; } if ((defined($request->{_xcatpreprocessed})) && ($request->{_xcatpreprocessed}->[0] == 1)) { @@ -704,19 +709,18 @@ sub process_request { $bladepass = $tmp->{password}; } } - if ($request->{command}->[0] eq "findme") { - if (defined($request->{discoverymethod}) and defined($request->{discoverymethod}->[0]) and ($request->{discoverymethod}->[0] ne 'undef')) { + if (xCAT::DiscoveryUtils::is_findme_request($request)) { + if (xCAT::DiscoveryUtils::findme_request_is_claimed($request)) { # The findme request had been processed by other module, just return return; } my $mptab = xCAT::Table->new("mp"); unless ($mptab) { return 2; } - my @bladents = $mptab->getAllNodeAttribs([qw(node)]); - my @blades; - foreach (@bladents) { - push @blades, $_->{node}; - } + my @bladents = $mptab->getAllNodeAttribs([qw(node nodetype mpa)]); + my @blades = xCAT::BladeUtils::blade_nodes_from_mp(@bladents); + + unless (@blades) { return; } my %invreq; $invreq{node} = \@blades; $invreq{arg} = ['mac'];