Skip to content

Instantly share code, notes, and snippets.

@Teagan42
Created October 6, 2020 16:31
Show Gist options
  • Save Teagan42/3c3ebac91a1042af52e8357b25178fd0 to your computer and use it in GitHub Desktop.
Save Teagan42/3c3ebac91a1042af52e8357b25178fd0 to your computer and use it in GitHub Desktop.
- name: Verify FAN is in spec
block:
- name: Get FAN Data
shell:
cmd: "ipmitool sdr elist | grep FAN"
register: siad_hard_diag_fan
- name: Prep PSU data for processing
set_facts:
fan_dict: >
{
{% for attr, id_regex in impi_fan_attr_map.items() %}
"{{attr}}": {
{% set fan_lines = stdout_lines | map('regex_search', id_regex) | list | select('ne', None) | unique %}
{% for fan_id in fan_lines | map('regex_search', id_regex, '\\1') | first %}
{% set fan_line = fan_lines | map('regex_search', '^(?:.*)?'~fan_id~'.*$') | first %}
"{{fan_id}}": {
"state": "{{fan_line.split('|')[2] | trim}}",
"value": "{{fan_line.split('|')[4] | trim}}"
},
{% endfor %}
},
{% endfor %}
}
- name: Verify FAN temperature state is in spec
assert:
that:
- fan_dict.Temp.[item].state == 'ok'
fail_msg: "Failed: Expected {{ item }} temperature state to be 'ok', is {{ fan_dict.Temp.[item].state }}"
success_msg: "OK: {{ item }} temperature state matches: 'ok'"
loop: "{{ fan_dict.Temp.keys() }}"
- name: Verify FAN temperature is in spec
assert:
that:
- fan_dict.Temp.[item].value | regex_search('(\\d+)') | int >= siad_fan_temp_range.min
- fan_dict.Temp.[item].value | regex_search('(\\d+)') | int <= siad_fan_temp_range.max
fail_msg: "Failed: Expected {{ item }} temperature to be within {{siad_fan_temp_range.min}}-{{siad_fan_temp_range.max}} °C, is {{ fan_dict.Temp.[item].value }}"
success_msg: "OK: {{ item }} temperature within range: {{siad_fan_temp_range.min}}-{{siad_fan_temp_range.max}} °C"
loop: "{{ fan_dict.Temp.keys() }}"
- name: Verify FAN speed state is in spec
assert:
that:
- fan_dict.Speed.[item].state == 'ok'
fail_msg: "Failed: Expected {{ item }} speed state to be 'ok', is {{ fan_dict.Speed.[item].state }}"
success_msg: "OK: {{ item }} speed state matches: 'ok'"
loop: "{{ fan_dict.Speed.keys() }}"
- name: Verify FAN speed is in spec
assert:
that:
- fan_dict.Speed.[item].value | regex_search('(\\d+)') | int >= siad_fan_speed_range.min
- fan_dict.Speed.[item].value | regex_search('(\\d+)') | int <= siad_fan_speed_range.max
fail_msg: "Failed: Expected {{ item }} temperature to be within {{siad_fan_speed_range.min}}-{{siad_fan_speed_range.max}} RPM, is {{ fan_dict.Speed.[item].value }}"
success_msg: "OK: {{ item }} speed within range: {{siad_fan_speed_range.min}}-{{siad_fan_speed_range.max}} RPM"
loop: "{{ fan_dict.Speed.keys() }}"
- name: Verify FAN interrupt is in spec
assert:
that:
- fan_dict.Interrupt.[item].value == 'State Deasserted'
fail_msg: "Failed: Expected {{ item }} interrupt to be 'State Deasserted, is {{ fan_dict.Interrupt.[item].value }}"
success_msg: "OK: {{ item }} interrupt matches: 'State Deasserted'"
loop: "{{ fan_dict.Interrupt.keys() }}"
siad_impi_fan_attr_map:
Temp: '^Temp_(FANCARD[0-9]).*$'
Speed: '^(FAN_[0-9]).*$'
Interrupt: '^(FAN_CARD_INT).*$'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment