|  | #!/usr/bin/env python3 | 
|  |  | 
|  | r""" | 
|  | This module provides many valuable bmc ssh functions such as bmc_execute_command. | 
|  | """ | 
|  |  | 
|  | import os | 
|  |  | 
|  | import gen_robot_ssh as grs | 
|  | import gen_valid as gv | 
|  | from robot.libraries.BuiltIn import BuiltIn | 
|  |  | 
|  |  | 
|  | def bmc_execute_command( | 
|  | cmd_buf, | 
|  | print_out=0, | 
|  | print_err=0, | 
|  | ignore_err=0, | 
|  | fork=0, | 
|  | quiet=None, | 
|  | test_mode=None, | 
|  | time_out=None, | 
|  | ): | 
|  | r""" | 
|  | Run the given command in an BMC SSH session and return the stdout, stderr and the return code. | 
|  |  | 
|  | This function will obtain the global values for OPENBMC_HOST, OPENBMC_USERNAME, etc. | 
|  |  | 
|  | Description of arguments: | 
|  | cmd_buf                         The command string to be run in an SSH session. | 
|  | print_out                       If this is set, this function will print the stdout/stderr generated by | 
|  | the shell command. | 
|  | print_err                       If show_err is set, this function will print a standardized error report | 
|  | if the shell command returns non-zero. | 
|  | ignore_err                      Indicates that errors encountered on the sshlib.execute_command are to be | 
|  | ignored. | 
|  | fork                            Indicates that sshlib.start is to be used rather than | 
|  | sshlib.execute_command. | 
|  | quiet                           Indicates whether this function should run the pissuing() function prints | 
|  | an "Issuing: <cmd string>" to stdout.  This defaults to the global quiet | 
|  | value. | 
|  | test_mode                       If test_mode is set, this function will not actually run the command. | 
|  | This defaults to the global test_mode value. | 
|  | time_out                        The amount of time to allow for the execution of cmd_buf.  A value of | 
|  | None means that there is no limit to how long the command may take. | 
|  | """ | 
|  |  | 
|  | # Get global BMC variable values. | 
|  | openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}", default="") | 
|  | ssh_port = BuiltIn().get_variable_value("${SSH_PORT}", default="22") | 
|  | openbmc_username = BuiltIn().get_variable_value( | 
|  | "${OPENBMC_USERNAME}", default="" | 
|  | ) | 
|  | openbmc_password = BuiltIn().get_variable_value( | 
|  | "${OPENBMC_PASSWORD}", default="" | 
|  | ) | 
|  |  | 
|  | if not gv.valid_value(openbmc_host): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(openbmc_username): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(openbmc_password): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(ssh_port): | 
|  | return "", "", 1 | 
|  |  | 
|  | open_connection_args = { | 
|  | "host": openbmc_host, | 
|  | "alias": "bmc_connection", | 
|  | "timeout": "25.0", | 
|  | "prompt": "# ", | 
|  | "port": ssh_port, | 
|  | } | 
|  | login_args = {"username": openbmc_username, "password": openbmc_password} | 
|  |  | 
|  | openbmc_user_type = os.environ.get( | 
|  | "USER_TYPE", "" | 
|  | ) or BuiltIn().get_variable_value("${USER_TYPE}", default="") | 
|  | if openbmc_user_type == "sudo": | 
|  | cmd_buf = "sudo -i " + cmd_buf | 
|  | return grs.execute_ssh_command( | 
|  | cmd_buf, | 
|  | open_connection_args, | 
|  | login_args, | 
|  | print_out, | 
|  | print_err, | 
|  | ignore_err, | 
|  | fork, | 
|  | quiet, | 
|  | test_mode, | 
|  | time_out, | 
|  | ) | 
|  |  | 
|  |  | 
|  | def os_execute_command( | 
|  | cmd_buf, | 
|  | print_out=0, | 
|  | print_err=0, | 
|  | ignore_err=0, | 
|  | fork=0, | 
|  | quiet=None, | 
|  | test_mode=None, | 
|  | time_out=None, | 
|  | os_host="", | 
|  | os_username="", | 
|  | os_password="", | 
|  | ): | 
|  | r""" | 
|  | Run the given command in an OS SSH session and return the stdout, stderr and the return code. | 
|  |  | 
|  | This function will obtain the global values for OS_HOST, OS_USERNAME, etc. | 
|  |  | 
|  | Description of arguments: | 
|  | cmd_buf                         The command string to be run in an SSH session. | 
|  | print_out                       If this is set, this function will print the stdout/stderr generated by | 
|  | the shell command. | 
|  | print_err                       If show_err is set, this function will print a standardized error report | 
|  | if the shell command returns non-zero. | 
|  | ignore_err                      Indicates that errors encountered on the sshlib.execute_command are to be | 
|  | ignored. | 
|  | fork                            Indicates that sshlib.start is to be used rather than | 
|  | sshlib.execute_command. | 
|  | quiet                           Indicates whether this function should run the pissuing() function prints | 
|  | an "Issuing: <cmd string>" to stdout.  This defaults to the global quiet | 
|  | value. | 
|  | test_mode                       If test_mode is set, this function will not actually run the command. | 
|  | This defaults to the global test_mode value. | 
|  | time_out                        The amount of time to allow for the execution of cmd_buf.  A value of | 
|  | None means that there is no limit to how long the command may take. | 
|  | """ | 
|  |  | 
|  | # Get global OS variable values. | 
|  | if os_host == "": | 
|  | os_host = BuiltIn().get_variable_value("${OS_HOST}", default="") | 
|  | if os_username == "": | 
|  | os_username = BuiltIn().get_variable_value( | 
|  | "${OS_USERNAME}", default="" | 
|  | ) | 
|  | if os_password == "": | 
|  | os_password = BuiltIn().get_variable_value( | 
|  | "${OS_PASSWORD}", default="" | 
|  | ) | 
|  |  | 
|  | if not gv.valid_value(os_host): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(os_username): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(os_password): | 
|  | return "", "", 1 | 
|  |  | 
|  | open_connection_args = {"host": os_host, "alias": "os_connection"} | 
|  | login_args = {"username": os_username, "password": os_password} | 
|  |  | 
|  | return grs.execute_ssh_command( | 
|  | cmd_buf, | 
|  | open_connection_args, | 
|  | login_args, | 
|  | print_out, | 
|  | print_err, | 
|  | ignore_err, | 
|  | fork, | 
|  | quiet, | 
|  | test_mode, | 
|  | time_out, | 
|  | ) | 
|  |  | 
|  |  | 
|  | def xcat_execute_command( | 
|  | cmd_buf, | 
|  | print_out=0, | 
|  | print_err=0, | 
|  | ignore_err=0, | 
|  | fork=0, | 
|  | quiet=None, | 
|  | test_mode=None, | 
|  | ): | 
|  | r""" | 
|  | Run the given command in an XCAT SSH session and return the stdout, stderr and the return code. | 
|  |  | 
|  | This function will obtain the global values for XCAT_HOST, XCAT_USERNAME, etc. | 
|  |  | 
|  | Description of arguments: | 
|  | cmd_buf                         The command string to be run in an SSH session. | 
|  | print_out                       If this is set, this function will print the stdout/stderr generated by | 
|  | the shell command. | 
|  | print_err                       If show_err is set, this function will print a standardized error report | 
|  | if the shell command returns non-zero. | 
|  | ignore_err                      Indicates that errors encountered on the sshlib.execute_command are to be | 
|  | ignored. | 
|  | fork                            Indicates that sshlib.start is to be used rather than | 
|  | sshlib.execute_command. | 
|  | quiet                           Indicates whether this function should run the pissuing() function prints | 
|  | an "Issuing: <cmd string>" to stdout.  This defaults to the global quiet | 
|  | value. | 
|  | test_mode                       If test_mode is set, this function will not actually run the command. | 
|  | This defaults to the global test_mode value. | 
|  | """ | 
|  |  | 
|  | # Get global XCAT variable values. | 
|  | xcat_host = BuiltIn().get_variable_value("${XCAT_HOST}", default="") | 
|  | xcat_username = BuiltIn().get_variable_value( | 
|  | "${XCAT_USERNAME}", default="" | 
|  | ) | 
|  | xcat_password = BuiltIn().get_variable_value( | 
|  | "${XCAT_PASSWORD}", default="" | 
|  | ) | 
|  | xcat_port = BuiltIn().get_variable_value("${XCAT_PORT}", default="22") | 
|  |  | 
|  | if not gv.valid_value(xcat_host): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(xcat_username): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(xcat_password): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(xcat_port): | 
|  | return "", "", 1 | 
|  |  | 
|  | open_connection_args = { | 
|  | "host": xcat_host, | 
|  | "alias": "xcat_connection", | 
|  | "port": xcat_port, | 
|  | } | 
|  | login_args = {"username": xcat_username, "password": xcat_password} | 
|  |  | 
|  | return grs.execute_ssh_command( | 
|  | cmd_buf, | 
|  | open_connection_args, | 
|  | login_args, | 
|  | print_out, | 
|  | print_err, | 
|  | ignore_err, | 
|  | fork, | 
|  | quiet, | 
|  | test_mode, | 
|  | ) | 
|  |  | 
|  |  | 
|  | def device_write(cmd_buf, print_out=0, quiet=None, test_mode=None): | 
|  | r""" | 
|  | Write the given command in a device SSH session and return the stdout, stderr and the return code. | 
|  |  | 
|  | This function is useful for writing to a switch. | 
|  |  | 
|  | This function will obtain the global values for DEVICE_HOST, DEVICE_USERNAME, etc. | 
|  |  | 
|  | Description of arguments: | 
|  | cmd_buf                         The command string to be run in an SSH session. | 
|  | print_out                       If this is set, this function will print the stdout/stderr generated by | 
|  | the shell command. | 
|  | print_err                       If show_err is set, this function will print a standardized error report | 
|  | if the shell command returns non-zero. | 
|  | ignore_err                      Indicates that errors encountered on the sshlib.execute_command are to be | 
|  | ignored. | 
|  | fork                            Indicates that sshlib.start is to be used rather than | 
|  | sshlib.execute_command. | 
|  | quiet                           Indicates whether this function should run the pissuing() function prints | 
|  | an "Issuing: <cmd string>" to stdout.  This defaults to the global quiet | 
|  | value. | 
|  | test_mode                       If test_mode is set, this function will not actually run the command. | 
|  | This defaults to the global test_mode value. | 
|  | """ | 
|  |  | 
|  | # Get global DEVICE variable values. | 
|  | device_host = BuiltIn().get_variable_value("${DEVICE_HOST}", default="") | 
|  | device_username = BuiltIn().get_variable_value( | 
|  | "${DEVICE_USERNAME}", default="" | 
|  | ) | 
|  | device_password = BuiltIn().get_variable_value( | 
|  | "${DEVICE_PASSWORD}", default="" | 
|  | ) | 
|  | device_port = BuiltIn().get_variable_value("${DEVICE_PORT}", default="22") | 
|  |  | 
|  | if not gv.valid_value(device_host): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(device_username): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(device_password): | 
|  | return "", "", 1 | 
|  | if not gv.valid_value(device_port): | 
|  | return "", "", 1 | 
|  |  | 
|  | open_connection_args = { | 
|  | "host": device_host, | 
|  | "alias": "device_connection", | 
|  | "port": device_port, | 
|  | } | 
|  | login_args = {"username": device_username, "password": device_password} | 
|  |  | 
|  | return grs.execute_ssh_command( | 
|  | cmd_buf, | 
|  | open_connection_args, | 
|  | login_args, | 
|  | print_out, | 
|  | print_err=0, | 
|  | ignore_err=1, | 
|  | fork=0, | 
|  | quiet=quiet, | 
|  | test_mode=test_mode, | 
|  | ) |