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