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