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