blob: b9ead59019c4685eb9296f40ca6740065ee204d6 [file] [log] [blame]
#!/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,
)