diff --git a/perl-xCAT/xCAT/Version.pm b/perl-xCAT/xCAT/Version.pm index 086799bde..1aa35869c 100644 --- a/perl-xCAT/xCAT/Version.pm +++ b/perl-xCAT/xCAT/Version.pm @@ -54,4 +54,34 @@ sub Version } +#------------------------------------------------------------------------------- + +=head3 Release + Arguments: + Optional version string; defaults to Version(); + Returns: + the release part of the version, without the build-specific + decoration the build stamps on, such as " (git commit )", + so two nodes at the same release built from different snapshots + compare equal. + Globals: + none + Error: + none + Example: + $release=xCAT::Version->Release($someversion); + Comments: + none +=cut + +#------------------------------------------------------------------------------- +sub Release +{ + my $class = shift; + my $version = shift; + $version = $class->Version() unless defined $version; + $version =~ s/\s*\(.*//s; + return $version; +} + 1; diff --git a/xCAT-server/sbin/xcatd b/xCAT-server/sbin/xcatd index d1e27025d..fc1047033 100755 --- a/xCAT-server/sbin/xcatd +++ b/xCAT-server/sbin/xcatd @@ -2945,9 +2945,13 @@ sub service_connection { #if the 2 versions are different, a warning message is included in the response if($req->{'_xcatver'} and $req->{'_xcatver'}->[0]){ my $myxcatver=xCAT::Version->Version(); - if($req->{'_xcatver'}->[0] ne $myxcatver){ + my $peerxcatver=$req->{'_xcatver'}->[0]; + if($peerxcatver ne $myxcatver){ my $myhostname=Sys::Hostname::hostname; - my $resp = { warning => ["xCAT Version mismatch! \n $myhostname: $myxcatver\n $peerhost: $req->{'_xcatver'}->[0]\n"]}; + my $label = (xCAT::Version->Release($peerxcatver) ne xCAT::Version->Release($myxcatver)) + ? "xCAT Version mismatch!" + : "xCAT build level differs (same release):"; + my $resp = { warning => ["$label \n $myhostname: $myxcatver\n $peerhost: $peerxcatver\n"]}; send_response($resp, $sock); } }