1#!/usr/bin/env python 2 3r""" 4This module provides many valuable bmc ssh functions such as 5bmc_execute_command. 6""" 7 8import sys 9try: 10 import exceptions 11except ImportError: 12 import builtins as exception 13import re 14import gen_print as gp 15import gen_valid as gv 16import gen_robot_ssh as grs 17from robot.libraries.BuiltIn import BuiltIn 18 19 20def bmc_execute_command(cmd_buf, 21 print_out=0, 22 print_err=0, 23 ignore_err=0, 24 fork=0, 25 quiet=None, 26 test_mode=None, 27 time_out=None): 28 r""" 29 Run the given command in an BMC SSH session and return the stdout, stderr 30 and the return code. 31 32 This function will obtain the global values for OPENBMC_HOST, 33 OPENBMC_USERNAME, etc. 34 35 Description of arguments: 36 cmd_buf The command string to be run in an SSH 37 session. 38 print_out If this is set, this function will print 39 the stdout/stderr generated by the shell 40 command. 41 print_err If show_err is set, this function will 42 print a standardized error report if the 43 shell command returns non-zero. 44 ignore_err Indicates that errors encountered on the 45 sshlib.execute_command are to be ignored. 46 fork Indicates that sshlib.start is to be used 47 rather than sshlib.execute_command. 48 quiet Indicates whether this function should run 49 the pissuing() function prints an 50 "Issuing: <cmd string>" to stdout. This 51 defaults to the global quiet value. 52 test_mode If test_mode is set, this function will 53 not actually run the command. This 54 defaults to the global test_mode value. 55 time_out The amount of time to allow for the 56 execution of cmd_buf. A value of None 57 means that there is no limit to how long 58 the command may take. 59 """ 60 61 # Get global BMC variable values. 62 openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}", default="") 63 openbmc_username = BuiltIn().get_variable_value("${OPENBMC_USERNAME}", 64 default="") 65 openbmc_password = BuiltIn().get_variable_value("${OPENBMC_PASSWORD}", 66 default="") 67 68 if not gv.valid_value(openbmc_host): 69 return "", "", 1 70 if not gv.valid_value(openbmc_username): 71 return "", "", 1 72 if not gv.valid_value(openbmc_password): 73 return "", "", 1 74 75 open_connection_args = {'host': openbmc_host, 'alias': 'bmc_connection', 76 'timeout': '25.0', 'prompt': '# '} 77 login_args = {'username': openbmc_username, 'password': openbmc_password} 78 79 return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args, 80 print_out, print_err, ignore_err, fork, 81 quiet, test_mode, time_out) 82 83 84def os_execute_command(cmd_buf, 85 print_out=0, 86 print_err=0, 87 ignore_err=0, 88 fork=0, 89 quiet=None, 90 test_mode=None, 91 time_out=None): 92 r""" 93 Run the given command in an OS SSH session and return the stdout, stderr 94 and the return code. 95 96 This function will obtain the global values for OS_HOST, OS_USERNAME, etc. 97 98 Description of arguments: 99 cmd_buf The command string to be run in an SSH 100 session. 101 print_out If this is set, this function will print 102 the stdout/stderr generated by the shell 103 command. 104 print_err If show_err is set, this function will 105 print a standardized error report if the 106 shell command returns non-zero. 107 ignore_err Indicates that errors encountered on the 108 sshlib.execute_command are to be ignored. 109 fork Indicates that sshlib.start is to be used 110 rather than sshlib.execute_command. 111 quiet Indicates whether this function should run 112 the pissuing() function prints an 113 "Issuing: <cmd string>" to stdout. This 114 defaults to the global quiet value. 115 test_mode If test_mode is set, this function will 116 not actually run the command. This 117 defaults to the global test_mode value. 118 time_out The amount of time to allow for the 119 execution of cmd_buf. A value of None 120 means that there is no limit to how long 121 the command may take. 122 """ 123 124 # Get global OS variable values. 125 os_host = BuiltIn().get_variable_value("${OS_HOST}", default="") 126 os_username = BuiltIn().get_variable_value("${OS_USERNAME}", 127 default="") 128 os_password = BuiltIn().get_variable_value("${OS_PASSWORD}", 129 default="") 130 131 if not gv.valid_value(os_host): 132 return "", "", 1 133 if not gv.valid_value(os_username): 134 return "", "", 1 135 if not gv.valid_value(os_password): 136 return "", "", 1 137 138 open_connection_args = {'host': os_host, 'alias': 'os_connection'} 139 login_args = {'username': os_username, 'password': os_password} 140 141 return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args, 142 print_out, print_err, ignore_err, fork, 143 quiet, test_mode, time_out) 144 145 146def xcat_execute_command(cmd_buf, 147 print_out=0, 148 print_err=0, 149 ignore_err=0, 150 fork=0, 151 quiet=None, 152 test_mode=None): 153 r""" 154 Run the given command in an XCAT SSH session and return the stdout, stderr 155 and the return code. 156 157 This function will obtain the global values for XCAT_HOST, XCAT_USERNAME, 158 etc. 159 160 Description of arguments: 161 cmd_buf The command string to be run in an SSH 162 session. 163 print_out If this is set, this function will print 164 the stdout/stderr generated by the shell 165 command. 166 print_err If show_err is set, this function will 167 print a standardized error report if the 168 shell command returns non-zero. 169 ignore_err Indicates that errors encountered on the 170 sshlib.execute_command are to be ignored. 171 fork Indicates that sshlib.start is to be used 172 rather than sshlib.execute_command. 173 quiet Indicates whether this function should run 174 the pissuing() function prints an 175 "Issuing: <cmd string>" to stdout. This 176 defaults to the global quiet value. 177 test_mode If test_mode is set, this function will 178 not actually run the command. This 179 defaults to the global test_mode value. 180 """ 181 182 # Get global XCAT variable values. 183 xcat_host = BuiltIn().get_variable_value("${XCAT_HOST}", default="") 184 xcat_username = BuiltIn().get_variable_value("${XCAT_USERNAME}", 185 default="") 186 xcat_password = BuiltIn().get_variable_value("${XCAT_PASSWORD}", 187 default="") 188 xcat_port = BuiltIn().get_variable_value("${XCAT_PORT}", 189 default="22") 190 191 if not gv.valid_value(xcat_host): 192 return "", "", 1 193 if not gv.valid_value(xcat_username): 194 return "", "", 1 195 if not gv.valid_value(xcat_password): 196 return "", "", 1 197 if not gv.valid_value(xcat_port): 198 return "", "", 1 199 200 open_connection_args = {'host': xcat_host, 'alias': 'xcat_connection', 201 'port': xcat_port} 202 login_args = {'username': xcat_username, 'password': xcat_password} 203 204 return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args, 205 print_out, print_err, ignore_err, fork, 206 quiet, test_mode) 207 208 209def device_write(cmd_buf, 210 print_out=0, 211 quiet=None, 212 test_mode=None): 213 r""" 214 Write the given command in a device SSH session and return the stdout, 215 stderr and the return code. 216 217 This function is useful for writing to a switch. 218 219 This function will obtain the global values for DEVICE_HOST, 220 DEVICE_USERNAME, etc. 221 222 Description of arguments: 223 cmd_buf The command string to be run in an SSH 224 session. 225 print_out If this is set, this function will print 226 the stdout/stderr generated by the shell 227 command. 228 print_err If show_err is set, this function will 229 print a standardized error report if the 230 shell command returns non-zero. 231 ignore_err Indicates that errors encountered on the 232 sshlib.execute_command are to be ignored. 233 fork Indicates that sshlib.start is to be used 234 rather than sshlib.execute_command. 235 quiet Indicates whether this function should run 236 the pissuing() function prints an 237 "Issuing: <cmd string>" to stdout. This 238 defaults to the global quiet value. 239 test_mode If test_mode is set, this function will 240 not actually run the command. This 241 defaults to the global test_mode value. 242 """ 243 244 # Get global DEVICE variable values. 245 device_host = BuiltIn().get_variable_value("${DEVICE_HOST}", default="") 246 device_username = BuiltIn().get_variable_value("${DEVICE_USERNAME}", 247 default="") 248 device_password = BuiltIn().get_variable_value("${DEVICE_PASSWORD}", 249 default="") 250 device_port = BuiltIn().get_variable_value("${DEVICE_PORT}", 251 default="22") 252 253 if not gv.valid_value(device_host): 254 return "", "", 1 255 if not gv.valid_value(device_username): 256 return "", "", 1 257 if not gv.valid_value(device_password): 258 return "", "", 1 259 if not gv.valid_value(device_port): 260 return "", "", 1 261 262 open_connection_args = {'host': device_host, 'alias': 'device_connection', 263 'port': device_port} 264 login_args = {'username': device_username, 'password': device_password} 265 266 return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args, 267 print_out, print_err=0, ignore_err=1, 268 fork=0, quiet=quiet, test_mode=test_mode) 269