1*** Settings ***
2Documentation    Utilities for redfish BIOS attribute operations.
3
4Resource         resource.robot
5Resource         bmc_redfish_resource.robot
6Resource         common_utils.robot
7Resource         utils.robot
8Library          tftp_update_utils.py
9
10
11*** Keywords ***
12
13Set BIOS Attribute Value And Verify
14
15    [Documentation]  Set BIOS attribute handle with attribute value and verify.
16    [Arguments]      ${attr_handle}  ${attr_val}  ${verify}=${True}
17
18    # Description of argument(s):
19    # ${attr_handle}    BIOS Attribute handle (e.g. 'vmi_if0_ipv4_method').
20    # @{attr_val}       Attribute value for the given attribute handle.
21    # ${verify}         Verify the new value.
22
23
24    ${type_int}=    Evaluate  isinstance($attr_val, int)
25    ${value}=  Set Variable If  '${type_int}' == '${True}'  ${attr_val}  '${attr_val}'
26
27    Redfish.Patch  ${BIOS_ATTR_SETTINGS_URI}  body={"Attributes":{"${attr_handle}": ${value}}}
28    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
29
30    Run Keyword If  '${verify}' == '${True}'  Verify BIOS Attribute  ${attr_handle}  ${attr_val}
31
32
33Set Optional BIOS Attribute Values And Verify
34
35    [Documentation]  For the given BIOS attribute handle update with optional
36    ...              attribute values and verify.
37    [Arguments]  ${attr_handle}  @{attr_val_list}
38
39    # Description of argument(s):
40    # ${attr_handle}    BIOS Attribute handle (e.g. 'vmi_if0_ipv4_method').
41    # @{attr_val_list}  List of the attribute values for the given attribute handle.
42    #                   (e.g. ['IPv4Static', 'IPv4DHCP']).
43
44    FOR  ${attr}  IN  @{attr_val_list}
45        ${new_attr}=  Evaluate  $attr.replace('"', '')
46        Set BIOS Attribute Value And Verify  ${attr_handle}  ${new_attr}
47    END
48
49
50Verify BIOS Attribute
51
52    [Documentation]  Verify BIOS attribute value.
53    [Arguments]  ${attr_handle}  ${attr_val}
54
55    # Description of argument(s):
56    # ${attr_handle}    BIOS Attribute handle (e.g. 'vmi_if0_ipv4_method').
57    # ${attr_val}       The expected value for the given attribute handle.
58
59    ${output}=  Redfish.Get Attribute  ${BIOS_ATTR_URI}  Attributes
60    Should Be Equal  ${output['${attr_handle}']}  ${attr_val}
61
62
63Switch And Verify BIOS Attribute Firmware Boot Side
64    [Documentation]  Switch BIOS attribute firmware boot side value to Perm/Temp
65    ...              at host power off state and verify firmware boot side
66    ...              value after BMC reboot.
67    [Arguments]      ${set_fw_boot_side}
68
69    # Description of argument(s):
70    # set_fw_boot_side    Firmware boot side optional value Perm/Temp.
71
72    # Do host power off.
73    Redfish Power Off  stack_mode=skip  quiet=1
74
75    # Get pre reboot state.
76    ${pre_reboot_state}=  Get Pre Reboot State
77
78    # Get fw_boot_side value, make sure given set_fw_boot_side and
79    # fw_boot_side values are not same.
80
81    ${cur_boot_side}=  Redfish.Get Attribute  ${BIOS_ATTR_URI}  Attributes
82    Should Not Be Equal  ${cur_boot_side["fw_boot_side_current"]}  ${set_fw_boot_side}
83    ...  msg=Current firmware boot side & the given firmware boot side are same...
84
85    Log To Console  Current firmware boot side :: ${cur_boot_side["fw_boot_side"]}
86    Log To Console  Given firmware boot side :: ${set_fw_boot_side}
87
88    # Set the given firmware boot side value.
89    Set BIOS Attribute Value And Verify  fw_boot_side  ${set_fw_boot_side}  False
90
91    # Power on BMC and wait for BMC to take reboot.
92    Log To Console  Perform power on operation & expect BMC to take reboot...
93    Redfish Power Operation  On
94
95    Log To Console  Wait for the BMC to take reboot and come back online...
96    Wait For Reboot  start_boot_seconds=${pre_reboot_state['epoch_seconds']}
97    ...  wait_state_check=0
98
99    # Post BMC reboot, host should auto power on back to runtime.
100    Log To Console  BMC rebooted, wait for host to boot...
101    Wait Until Keyword Succeeds  ${OS_RUNNING_TIMEOUT} min  20 sec
102    ...  Is Boot Progress At Any State
103
104    # Verify firmware boot side values after BMC reboot.
105    Verify BIOS Attribute  fw_boot_side  ${set_fw_boot_side}
106    Verify BIOS Attribute  fw_boot_side_current  ${set_fw_boot_side}
107