diff --git a/xCAT-server/lib/perl/xCAT/SvrUtils.pm b/xCAT-server/lib/perl/xCAT/SvrUtils.pm index 37dab6083..a82c7d422 100755 --- a/xCAT-server/lib/perl/xCAT/SvrUtils.pm +++ b/xCAT-server/lib/perl/xCAT/SvrUtils.pm @@ -452,37 +452,59 @@ sub get_file_name { #usally there're only 4 arguments passed for this function #the $genos is only used for the Redhat family - my $dotpos = rindex($os, "."); - my $osbase = substr($os, 0, $dotpos); #handle the following ostypes: sles10.2, sles11.1, rhels5.3, rhels5.4, etc if (-r "$searchpath/$profile.$os.$arch.$extension") { return "$searchpath/$profile.$os.$arch.$extension"; } - elsif (-r "$searchpath/$profile.$os.$extension") { + if (-r "$searchpath/$profile.$os.$extension") { return "$searchpath/$profile.$os.$extension"; } - elsif (($genos) && (-r "$searchpath/$profile.$genos.$arch.$extension")) { + if (($genos) && (-r "$searchpath/$profile.$genos.$arch.$extension")) { return "$searchpath/$profile.$genos.$arch.$extension"; } - elsif (($genos) && (-r "$searchpath/$profile.$genos.$extension")) { + if (($genos) && (-r "$searchpath/$profile.$genos.$extension")) { return "$searchpath/$profile.$genos.$extension"; } + + my $dotpos = rindex($os, "."); + my $osbase = substr($os, 0, $dotpos); # If the osimge name was specified with -n, the name might contain multiple "." # Chop them off one at a time until filename match is found - else { - while ($dotpos > 0) { + while ($dotpos > 0) { + if (-r "$searchpath/$profile.$osbase.$arch.$extension") { + return "$searchpath/$profile.$osbase.$arch.$extension"; + } + if (-r "$searchpath/$profile.$osbase.$extension") { + return "$searchpath/$profile.$osbase.$extension"; + } + # Chop off "." from the end and try again + $dotpos = rindex($osbase, "."); + $osbase = substr($osbase, 0, $dotpos); + } - if (-r "$searchpath/$profile.$osbase.$arch.$extension") { - return "$searchpath/$profile.$osbase.$arch.$extension"; - } - elsif (-r "$searchpath/$profile.$osbase.$extension") { - return "$searchpath/$profile.$osbase.$extension"; - } - # Chop off "." from the end and try again - $dotpos = rindex($osbase, "."); - $osbase = substr($osbase, 0, $dotpos); + #if there are no '.', pick the two numbers follow by leading string, like sles11 + #then pick one number follow by leading string, like centos7, rhels7 + if ($os =~ m/([a-zA-Z]+\d\d)/) + { + $osbase=$1; + if (-r "$searchpath/$profile.$osbase.$arch.$extension") { + return "$searchpath/$profile.$osbase.$arch.$extension"; + } + if (-r "$searchpath/$profile.$osbase.$extension") { + return "$searchpath/$profile.$osbase.$extension"; + } + } + + if ($os =~ m/([a-zA-Z]+\d)/) + { + $osbase = $1; + if (-r "$searchpath/$profile.$osbase.$arch.$extension") { + return "$searchpath/$profile.$osbase.$arch.$extension"; + } + if (-r "$searchpath/$profile.$osbase.$extension") { + return "$searchpath/$profile.$osbase.$extension"; } } @@ -490,12 +512,11 @@ sub get_file_name { if (-r "$searchpath/$profile.$arch.$extension") { return "$searchpath/$profile.$arch.$extension"; } - elsif (-r "$searchpath/$profile.$extension") { + if (-r "$searchpath/$profile.$extension") { return "$searchpath/$profile.$extension"; } - else { - return undef; - } + + return undef; } sub get_tmpl_file_name { @@ -541,24 +562,60 @@ sub get_postinstall_file_name { if (-x "$searchpath/$profile.$os.$arch.$extension") { return "$searchpath/$profile.$os.$arch.$extension"; } - elsif (-x "$searchpath/$profile.$osbase.$arch.$extension") { + if (-x "$searchpath/$profile.$osbase.$arch.$extension") { return "$searchpath/$profile.$osbase.$arch.$extension"; } - elsif (-x "$searchpath/$profile.$os.$extension") { + if (-x "$searchpath/$profile.$os.$extension") { return "$searchpath/$profile.$os.$extension"; } - elsif (-x "$searchpath/$profile.$osbase.$extension") { + if (-x "$searchpath/$profile.$osbase.$extension") { return "$searchpath/$profile.$osbase.$extension"; } - elsif (-x "$searchpath/$profile.$arch.$extension") { + # If the osimge name was specified with -n, the name might contain multiple "." + # Chop them off one at a time until filename match is found + while ($dotpos > 0) { + if (-x "$searchpath/$profile.$osbase.$arch.$extension") { + return "$searchpath/$profile.$osbase.$arch.$extension"; + } + if (-x "$searchpath/$profile.$osbase.$extension") { + return "$searchpath/$profile.$osbase.$extension"; + } + # Chop off "." from the end and try again + $dotpos = rindex($osbase, "."); + $osbase = substr($osbase, 0, $dotpos); + } + + #if there are no '.', pick the two numbers follow by leading string, like sles11 + #then pick one number follow by leading string, like centos7, rhels7 + if ($os =~ m/([a-zA-Z]+\d\d)/) + { + $osbase=$1; + if (-x "$searchpath/$profile.$osbase.$arch.$extension") { + return "$searchpath/$profile.$osbase.$arch.$extension"; + } + if (-x "$searchpath/$profile.$osbase.$extension") { + return "$searchpath/$profile.$osbase.$extension"; + } + } + + if ($os =~ m/([a-zA-Z]+\d)/) + { + $osbase = $1; + if (-x "$searchpath/$profile.$osbase.$arch.$extension") { + return "$searchpath/$profile.$osbase.$arch.$extension"; + } + if (-x "$searchpath/$profile.$osbase.$extension") { + return "$searchpath/$profile.$osbase.$extension"; + } + } + + if (-x "$searchpath/$profile.$arch.$extension") { return "$searchpath/$profile.$arch.$extension"; } - elsif (-x "$searchpath/$profile.$extension") { + if (-x "$searchpath/$profile.$extension") { return "$searchpath/$profile.$extension"; } - else { - return undef; - } + return undef; }