forked from alombardo4/idrac-fan-control-docker
-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #75 from tigerblue77/73-improve-code-structure
Improved code structure
- Loading branch information
Showing
3 changed files
with
100 additions
and
96 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# Define global functions | ||
# This function applies Dell's default dynamic fan control profile | ||
function apply_Dell_fan_control_profile () { | ||
# Use ipmitool to send the raw command to set fan control to Dell default | ||
ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0x30 0x01 0x01 > /dev/null | ||
CURRENT_FAN_CONTROL_PROFILE="Dell default dynamic fan control profile" | ||
} | ||
|
||
# This function applies a user-specified static fan control profile | ||
function apply_user_fan_control_profile () { | ||
# Use ipmitool to send the raw command to set fan control to user-specified value | ||
ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0x30 0x01 0x00 > /dev/null | ||
ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0x30 0x02 0xff $HEXADECIMAL_FAN_SPEED > /dev/null | ||
CURRENT_FAN_CONTROL_PROFILE="User static fan control profile ($DECIMAL_FAN_SPEED%)" | ||
} | ||
|
||
# Retrieve temperature sensors data using ipmitool | ||
# Usage : retrieve_temperatures $IS_EXHAUST_TEMPERATURE_SENSOR_PRESENT $IS_CPU2_TEMPERATURE_SENSOR_PRESENT | ||
function retrieve_temperatures () { | ||
if (( $# != 2 )) | ||
then | ||
printf "Illegal number of parameters.\nUsage: retrieve_temperatures \$IS_EXHAUST_TEMPERATURE_SENSOR_PRESENT \$IS_CPU2_TEMPERATURE_SENSOR_PRESENT" >&2 | ||
return 1 | ||
fi | ||
local IS_EXHAUST_TEMPERATURE_SENSOR_PRESENT=$1 | ||
local IS_CPU2_TEMPERATURE_SENSOR_PRESENT=$2 | ||
|
||
local DATA=$(ipmitool -I $IDRAC_LOGIN_STRING sdr type temperature | grep degrees) | ||
|
||
# Parse CPU data | ||
local CPU_DATA=$(echo "$DATA" | grep "3\." | grep -Po '\d{2}') | ||
CPU1_TEMPERATURE=$(echo $CPU_DATA | awk '{print $1;}') | ||
if $IS_CPU2_TEMPERATURE_SENSOR_PRESENT | ||
then | ||
CPU2_TEMPERATURE=$(echo $CPU_DATA | awk '{print $2;}') | ||
else | ||
CPU2_TEMPERATURE="-" | ||
fi | ||
|
||
# Parse inlet temperature data | ||
INLET_TEMPERATURE=$(echo "$DATA" | grep Inlet | grep -Po '\d{2}' | tail -1) | ||
|
||
# If exhaust temperature sensor is present, parse its temperature data | ||
if $IS_EXHAUST_TEMPERATURE_SENSOR_PRESENT | ||
then | ||
EXHAUST_TEMPERATURE=$(echo "$DATA" | grep Exhaust | grep -Po '\d{2}' | tail -1) | ||
else | ||
EXHAUST_TEMPERATURE="-" | ||
fi | ||
} | ||
|
||
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 | ||
} | ||
|
||
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 | ||
} | ||
|
||
# Returns : | ||
# - 0 if third-party PCIe card Dell default cooling response is currently DISABLED | ||
# - 1 if third-party PCIe card Dell default cooling response is currently ENABLED | ||
# - 2 if the current status returned by ipmitool command output is unexpected | ||
# function is_third_party_PCIe_card_Dell_default_cooling_response_disabled() { | ||
# THIRD_PARTY_PCIE_CARD_COOLING_RESPONSE=$(ipmitool -I $IDRAC_LOGIN_STRING raw 0x30 0xce 0x01 0x16 0x05 0x00 0x00 0x00) | ||
|
||
# if [ "$THIRD_PARTY_PCIE_CARD_COOLING_RESPONSE" == "16 05 00 00 00 05 00 01 00 00" ]; then | ||
# return 0 | ||
# elif [ "$THIRD_PARTY_PCIE_CARD_COOLING_RESPONSE" == "16 05 00 00 00 05 00 00 00 00" ]; then | ||
# return 1 | ||
# else | ||
# echo "Unexpected output: $THIRD_PARTY_PCIE_CARD_COOLING_RESPONSE" >&2 | ||
# return 2 | ||
# fi | ||
# } | ||
|
||
# Prepare traps in case of container exit | ||
function gracefull_exit () { | ||
apply_Dell_fan_control_profile | ||
enable_third_party_PCIe_card_Dell_default_cooling_response | ||
echo "/!\ WARNING /!\ Container stopped, Dell default dynamic fan control profile applied for safety." | ||
exit 0 | ||
} | ||
|
||
# Helps debugging when people are posting their output | ||
function get_Dell_server_model () { | ||
IPMI_FRU_content=$(ipmitool fru 2>/dev/null) # FRU stands for "Field Replaceable Unit" | ||
|
||
SERVER_MANUFACTURER=$(echo "$IPMI_FRU_content" | grep "Product Manufacturer" | awk -F ': ' '{print $2}') | ||
SERVER_MODEL=$(echo "$IPMI_FRU_content" | grep "Product Name" | awk -F ': ' '{print $2}') | ||
} |