blob: 059ba9ac0fa5b3a75cad82cbb31685a75c4b435e [file] [log] [blame]
Michael Walsh3cc126a2017-06-30 17:02:10 -05001#!/usr/bin/env python
2
3r"""
4This module provides many valuable bmc ssh functions such as
5bmc_execute_command.
6"""
7
8import sys
George Keishing20a34c02018-09-24 11:26:04 -05009try:
10 import exceptions
11except ImportError:
12 import builtins as exception
Michael Walsh3cc126a2017-06-30 17:02:10 -050013import 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
Michael Walsh3cc126a2017-06-30 17:02:10 -050020def bmc_execute_command(cmd_buf,
21 print_out=0,
22 print_err=0,
23 ignore_err=0,
24 fork=0,
25 quiet=None,
Michael Walshc39c3722018-08-07 14:50:56 -050026 test_mode=None,
27 time_out=None):
Michael Walsh3cc126a2017-06-30 17:02:10 -050028 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.
Michael Walshc39c3722018-08-07 14:50:56 -050055 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.
Michael Walsh3cc126a2017-06-30 17:02:10 -050059 """
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,
Michael Walshc39c3722018-08-07 14:50:56 -050081 quiet, test_mode, time_out)
Michael Walsh3cc126a2017-06-30 17:02:10 -050082
Michael Walsh3cc126a2017-06-30 17:02:10 -050083
Michael Walsh3cc126a2017-06-30 17:02:10 -050084def os_execute_command(cmd_buf,
85 print_out=0,
86 print_err=0,
87 ignore_err=0,
88 fork=0,
89 quiet=None,
Michael Walshc39c3722018-08-07 14:50:56 -050090 test_mode=None,
91 time_out=None):
Michael Walsh3cc126a2017-06-30 17:02:10 -050092 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.
Michael Walshc39c3722018-08-07 14:50:56 -0500118 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.
Michael Walsh3cc126a2017-06-30 17:02:10 -0500122 """
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,
Michael Walshc39c3722018-08-07 14:50:56 -0500143 quiet, test_mode, time_out)
Michael Walsh3cc126a2017-06-30 17:02:10 -0500144
Michael Walsh78fa29a2017-07-31 15:35:02 -0500145
Michael Walsh78fa29a2017-07-31 15:35:02 -0500146def 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):
Michael Walsh78fa29a2017-07-31 15:35:02 -0500153 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)
Michael Walsh8243ac92018-05-02 13:47:07 -0500207
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)