diff --git a/perl-xCAT/xCAT/DHCP/Backend.pm b/perl-xCAT/xCAT/DHCP/Backend.pm index 1a753b981..0132f8a97 100644 --- a/perl-xCAT/xCAT/DHCP/Backend.pm +++ b/perl-xCAT/xCAT/DHCP/Backend.pm @@ -59,8 +59,9 @@ sub default_backend { my $os_name = exists $args{os_name} ? $args{os_name} : $class->_osver('os'); my $version = exists $args{version} ? $args{version} : $class->_osver('version'); - if ( defined($os_name) && $os_name =~ /^ubuntu$/i && _version_at_least( $version, '22.04' ) ) { - return 'kea'; + if ( defined($os_name) && $os_name =~ /^ubuntu$/i && defined($version) && $version =~ /^\d+\.\d+(?:\.\d+)*$/ ) { + require xCAT::Utils; + return 'kea' if xCAT::Utils->version_cmp( $version, '22.04' ) >= 0; } return 'isc'; @@ -153,23 +154,4 @@ sub _command_exists { return 0; } -sub _version_at_least { - my ( $version, $minimum ) = @_; - - return 0 unless defined($version) && $version =~ /^\d+\.\d+(?:\.\d+)*$/; - - my @version_parts = split /\./, $version; - my @minimum_parts = split /\./, $minimum; - my $max = @version_parts > @minimum_parts ? @version_parts : @minimum_parts; - - for my $idx ( 0 .. $max - 1 ) { - my $left = $version_parts[$idx] || 0; - my $right = $minimum_parts[$idx] || 0; - return 1 if $left > $right; - return 0 if $left < $right; - } - - return 1; -} - 1; diff --git a/perl-xCAT/xCAT/DHCP/Backend/Kea.pm b/perl-xCAT/xCAT/DHCP/Backend/Kea.pm index e83c55673..c4c1a27e0 100644 --- a/perl-xCAT/xCAT/DHCP/Backend/Kea.pm +++ b/perl-xCAT/xCAT/DHCP/Backend/Kea.pm @@ -899,7 +899,10 @@ sub _use_modern_additional_class_syntax { return 0 if $self->{additional_class_syntax} && $self->{additional_class_syntax} eq 'legacy'; my $version = $self->kea_version(); - return _version_at_least( $version, '2.7.4' ); + return 0 unless defined($version) && $version =~ /\A\d+(?:\.\d+)*(?:-[A-Za-z0-9]+)?\z/; + + require xCAT::Utils; + return xCAT::Utils->version_cmp( $version, '2.7.4' ) >= 0 ? 1 : 0; } sub kea_version { @@ -934,25 +937,6 @@ sub _first_defined { return; } -sub _version_at_least { - my ( $version, $minimum ) = @_; - - return 0 unless defined($version) && $version =~ /^\d+(?:\.\d+)*/; - - my @version_parts = split /\./, $version; - my @minimum_parts = split /\./, $minimum; - my $max = @version_parts > @minimum_parts ? @version_parts : @minimum_parts; - - for my $idx ( 0 .. $max - 1 ) { - my $left = $version_parts[$idx] || 0; - my $right = $minimum_parts[$idx] || 0; - return 1 if $left > $right; - return 0 if $left < $right; - } - - return 1; -} - sub _integer { my ($value) = @_;