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