From 9fbcd12a493853a3b549072d5966d0c7167635cd Mon Sep 17 00:00:00 2001 From: Sean Cline Date: Sun, 10 Nov 2024 20:27:43 +0100 Subject: [PATCH] Adding options for 14gen Dell servers via env var --- Dockerfile | 1 + README.md | 1 + functions.sh | 36 ++++++++++++++++++++++++++++++++---- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a5a1572..4c01adc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,6 +21,7 @@ HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "/a ENV IDRAC_HOST local # ENV IDRAC_USERNAME root # ENV IDRAC_PASSWORD calvin +ENV 14_GEN false ENV FAN_SPEED 5 ENV CPU_TEMPERATURE_THRESHOLD 50 ENV CHECK_INTERVAL 60 diff --git a/README.md b/README.md index e4f00d0..edfe99b 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,7 @@ All parameters are optional as they have default values (including default iDRAC - `CHECK_INTERVAL` parameter is the time (in seconds) between each temperature check and potential profile change. **Default** value is 60(s). - `DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE` parameter is a boolean that allows to disable third-party PCIe card Dell default cooling response. **Default** value is false. - `KEEP_THIRD_PARTY_PCIE_CARD_COOLING_RESPONSE_STATE_ON_EXIT` parameter is a boolean that allows to keep the third-party PCIe card Dell default cooling response state upon exit. **Default** value is false, so that it resets the third-party PCIe card Dell default cooling response to Dell default. +- `14_GEN` parameter that disabled 3rd party PCI calls and outputs CPU temperatures correctly for 14th Gen Dell servers, ex Dell r640, 740 series. Must have idrac 3.30.30.30 or older. **Default** value is false.

(back to top)

diff --git a/functions.sh b/functions.sh index a0922ab..49551bc 100644 --- a/functions.sh +++ b/functions.sh @@ -38,10 +38,24 @@ function retrieve_temperatures () { # Parse CPU data local CPU_DATA=$(echo "$DATA" | grep "3\." | grep -Po '\d{2}') - CPU1_TEMPERATURE=$(echo $CPU_DATA | awk '{print $1;}') + if $14_GEN + then + # 14 Gen server or newer + CPU1_TEMPERATURE=$(echo $CPU_DATA | awk '{print $2;}') + else + # 13 Gen server or older + CPU1_TEMPERATURE=$(echo $CPU_DATA | awk '{print $1;}') + fi if $IS_CPU2_TEMPERATURE_SENSOR_PRESENT then - CPU2_TEMPERATURE=$(echo $CPU_DATA | awk '{print $2;}') + if $14_GEN + then + # 14 Gen server or newer + CPU2_TEMPERATURE=$(echo $CPU_DATA | awk '{print $4;}') + else + # 13 Gen server or older + CPU2_TEMPERATURE=$(echo $CPU_DATA | awk '{print $2;}') + fi else CPU2_TEMPERATURE="-" fi @@ -60,12 +74,26 @@ function retrieve_temperatures () { function enable_third_party_PCIe_card_Dell_default_cooling_response () { # We could check the current cooling response before applying but it's not very useful so let's skip the test and apply directly - ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0xce 0x00 0x16 0x05 0x00 0x00 0x00 0x05 0x00 0x00 0x00 0x00 > /dev/null + if $14_GEN + then + # 14 Gen server or newer + continue + else + # 13 Gen server or older + ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0xce 0x00 0x16 0x05 0x00 0x00 0x00 0x05 0x00 0x00 0x00 0x00 > /dev/null + fi } function disable_third_party_PCIe_card_Dell_default_cooling_response () { # We could check the current cooling response before applying but it's not very useful so let's skip the test and apply directly - ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0xce 0x00 0x16 0x05 0x00 0x00 0x00 0x05 0x00 0x01 0x00 0x00 > /dev/null + if $14_GEN + then + # 14 Gen server or newer + continue + else + # 13 Gen server or older + ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0xce 0x00 0x16 0x05 0x00 0x00 0x00 0x05 0x00 0x01 0x00 0x00 > /dev/null + fi } # Returns :