From 40ecdec4d4748412ce30bda11db06a5aef9507cf Mon Sep 17 00:00:00 2001 From: Mark Gurevich Date: Wed, 27 Jun 2018 12:48:48 -0400 Subject: [PATCH 1/3] rflash for ipmi machines enhancements --- xCAT-server/lib/xcat/plugins/ipmi.pm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xCAT-server/lib/xcat/plugins/ipmi.pm b/xCAT-server/lib/xcat/plugins/ipmi.pm index 3e7171c35..2d208bd5a 100644 --- a/xCAT-server/lib/xcat/plugins/ipmi.pm +++ b/xCAT-server/lib/xcat/plugins/ipmi.pm @@ -2040,6 +2040,7 @@ sub do_firmware_update { $exit_with_error_func->($sessdata->{node}, $callback, "At least one update file (.bin or .pnor) needs to be in data directory $pUpdate_directory."); } + # All checks are done, run pUpdate utility on each of the update files found in # the specified data directory xCAT::SvrUtils::sendmsg("rflash started, Please wait...", $callback, $sessdata->{node}); @@ -2107,11 +2108,16 @@ sub do_firmware_update { $exit_with_success_func->($sessdata->{node}, $callback, "Firmware updated, powering chassis on to populate FRU information..."); } + # If we get here, the target machine is *NOT* IBM Power S822LC for Big Data (Supermicro) + # Only .hpm files is supported for such machine, no directory option is supported + if (defined $directory_name) { + $exit_with_error_func->($sessdata->{node}, $callback, "Directory option is not supported for target machine: \n$output"); + } if (($hpm_data_hash{deviceID} ne $sessdata->{device_id}) || ($hpm_data_hash{productID} ne $sessdata->{prod_id}) || ($hpm_data_hash{manufactureID} ne $sessdata->{mfg_id})) { $exit_with_error_func->($sessdata->{node}, $callback, - "The image file doesn't match this machine"); + "The image file doesn't match target machine: \n$output"); } # check for 8335-GTB Firmware above 1610A release. If below, exit From 9f629c5176ceff0c83aa739ccdd235056d99ec73 Mon Sep 17 00:00:00 2001 From: Mark Gurevich Date: Wed, 27 Jun 2018 15:34:44 -0400 Subject: [PATCH 2/3] Improvement from review --- xCAT-server/lib/xcat/plugins/ipmi.pm | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/ipmi.pm b/xCAT-server/lib/xcat/plugins/ipmi.pm index 2d208bd5a..9207bd4b4 100644 --- a/xCAT-server/lib/xcat/plugins/ipmi.pm +++ b/xCAT-server/lib/xcat/plugins/ipmi.pm @@ -50,6 +50,7 @@ my $xcatdebugmode = 0; my $IPMIXCAT = "/opt/xcat/bin/ipmitool-xcat"; my $NON_BLOCK = 1; +my $BIG_DATA_MACHINE_MODELS = "8001-22C|9006-22C|5104-22C|8001-12C|9006-12C"; use constant RFLASH_LOG_DIR => "/var/log/xcat/rflash"; if (-d RFLASH_LOG_DIR) { chmod 0700, RFLASH_LOG_DIR; @@ -1978,7 +1979,7 @@ sub do_firmware_update { # P9 Boston (9006-22C, 9006-12C, 5104-22C) or P8 Briggs (8001-22C) # firmware update is done using pUpdate utility expected to be in the # specified data directory along with the update files .bin for BMC or .pnor for Host - if ($output =~ /8001-22C|9006-22C|5104-22C|8001-12C|9006-12C/) { + if ($output =~ /$BIG_DATA_MACHINE_MODELS/) { # Verify valid data directory was specified if (defined $directory_name) { unless (File::Spec->file_name_is_absolute($directory_name)) { @@ -2106,18 +2107,30 @@ sub do_firmware_update { } $exit_with_success_func->($sessdata->{node}, $callback, "Firmware updated, powering chassis on to populate FRU information..."); + } else { + + # The target machine is *NOT* IBM Power S822LC for Big Data (Supermicro) + # Only .hpm files is supported for such machine, no directory option is supported + if (defined $directory_name) { + my ($part1, $part2) = split(/Chassis Part Number :/, $output); + my ($part3, $model) = split(/\s+/, $part2); + $exit_with_error_func->($sessdata->{node}, $callback, "Flashing of $model is not supported with pUpdate, supported Model Types: $BIG_DATA_MACHINE_MODELS"); + } } - # If we get here, the target machine is *NOT* IBM Power S822LC for Big Data (Supermicro) - # Only .hpm files is supported for such machine, no directory option is supported - if (defined $directory_name) { - $exit_with_error_func->($sessdata->{node}, $callback, "Directory option is not supported for target machine: \n$output"); - } - if (($hpm_data_hash{deviceID} ne $sessdata->{device_id}) || - ($hpm_data_hash{productID} ne $sessdata->{prod_id}) || - ($hpm_data_hash{manufactureID} ne $sessdata->{mfg_id})) { - $exit_with_error_func->($sessdata->{node}, $callback, - "The image file doesn't match target machine: \n$output"); + # If we fall through here, it is *NOT* IBM Power S822LC for Big Data (Supermicro) and we expact some data in hpm_data_hash. + # Verify hpm_data_hash has some values + if ((defined $hpm_data_hash{deviceID}) || + (defined $hpm_data_hash{productID}) || + (defined $hpm_data_hash{manufactureID})) { + + if (($hpm_data_hash{deviceID} ne $sessdata->{device_id}) || + ($hpm_data_hash{productID} ne $sessdata->{prod_id}) || + ($hpm_data_hash{manufactureID} ne $sessdata->{mfg_id})) { + $exit_with_error_func->($sessdata->{node}, $callback, "The image file doesn't match target machine: \n$output"); + } + } else { + $exit_with_error_func->($sessdata->{node}, $callback, "No data was extracted from .hpm update file"); } # check for 8335-GTB Firmware above 1610A release. If below, exit From a89b4b6fd4bf1db27964b4693d8bd1540ee757aa Mon Sep 17 00:00:00 2001 From: ertaozh Date: Wed, 11 Jul 2018 16:56:53 +0800 Subject: [PATCH 3/3] Small modification about rflash ipmi enhance in PR #5346 --- xCAT-server/lib/xcat/plugins/ipmi.pm | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/ipmi.pm b/xCAT-server/lib/xcat/plugins/ipmi.pm index 9207bd4b4..cfba7e458 100644 --- a/xCAT-server/lib/xcat/plugins/ipmi.pm +++ b/xCAT-server/lib/xcat/plugins/ipmi.pm @@ -2111,26 +2111,24 @@ sub do_firmware_update { # The target machine is *NOT* IBM Power S822LC for Big Data (Supermicro) # Only .hpm files is supported for such machine, no directory option is supported - if (defined $directory_name) { - my ($part1, $part2) = split(/Chassis Part Number :/, $output); - my ($part3, $model) = split(/\s+/, $part2); + if (defined $directory_name and $output =~ /Chassis Part Number\s*:\s*(\S*)/) { + my $model = $1; $exit_with_error_func->($sessdata->{node}, $callback, "Flashing of $model is not supported with pUpdate, supported Model Types: $BIG_DATA_MACHINE_MODELS"); } } # If we fall through here, it is *NOT* IBM Power S822LC for Big Data (Supermicro) and we expact some data in hpm_data_hash. # Verify hpm_data_hash has some values - if ((defined $hpm_data_hash{deviceID}) || - (defined $hpm_data_hash{productID}) || - (defined $hpm_data_hash{manufactureID})) { - if (($hpm_data_hash{deviceID} ne $sessdata->{device_id}) || - ($hpm_data_hash{productID} ne $sessdata->{prod_id}) || - ($hpm_data_hash{manufactureID} ne $sessdata->{mfg_id})) { - $exit_with_error_func->($sessdata->{node}, $callback, "The image file doesn't match target machine: \n$output"); - } - } else { - $exit_with_error_func->($sessdata->{node}, $callback, "No data was extracted from .hpm update file"); + + if (!exists($hpm_data_hash{deviceID}) + || !exists($hpm_data_hash{manufactureID}) + || !exists($hpm_data_hash{productID})) { + $exit_with_error_func->($sessdata->{node}, $callback, "Extract data from .hpm update file failed, no deviceID, productID or manufactureID got"); + } elsif (($hpm_data_hash{deviceID} ne $sessdata->{device_id}) || + ($hpm_data_hash{productID} ne $sessdata->{prod_id}) || + ($hpm_data_hash{manufactureID} ne $sessdata->{mfg_id})) { + $exit_with_error_func->($sessdata->{node}, $callback, "The image file doesn't match target machine: \n$output"); } # check for 8335-GTB Firmware above 1610A release. If below, exit