2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-04 12:07:56 +00:00

refactor(discovery): share blade findme decisions

This commit is contained in:
Vinícius Ferrão
2026-08-25 19:35:11 -03:00
parent 875f7d764d
commit b1ef0620de
4 changed files with 40 additions and 23 deletions
+25
View File
@@ -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
-10
View File
@@ -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;
+4 -6
View File
@@ -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
+11 -7
View File
@@ -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'];