|  | #!/usr/bin/env python | 
|  |  | 
|  | import gen_print as gp | 
|  | import gen_cmd as gc | 
|  | import collections | 
|  |  | 
|  | module_names = ['Selenium2Library', 'SeleniumLibrary', 'SSHLibrary', 'requests', | 
|  | 'XvfbRobot', 'robotremoteserver', 'redfish'] | 
|  |  | 
|  | import_versions = collections.OrderedDict() | 
|  |  | 
|  | for module_name in module_names: | 
|  | try: | 
|  | cmd_buf = "import " + module_name | 
|  | exec(cmd_buf) | 
|  | cmd_buf = "import_versions['" + module_name + "'] = " + module_name \ | 
|  | + ".__version__" | 
|  | exec(cmd_buf) | 
|  | except ImportError: | 
|  | import_versions[module_name] = "Not installed" | 
|  |  | 
|  |  | 
|  | def software_versions(): | 
|  | r""" | 
|  | Get the versions for several of the software packages used by | 
|  | openbmc-test-automation and return as a dictionary. | 
|  |  | 
|  | Example call: | 
|  | ${software_versions}=  Software Versions | 
|  | Rprint Vars  software_versions | 
|  |  | 
|  | Example output: | 
|  | software_versions: | 
|  | [python]:                                       Python 2.7.12 | 
|  | [robot]:                                        Robot Framework 3.1.2 (Python 3.6.8 on linux) | 
|  | [firefox]:                                      Mozilla Firefox 54.0 | 
|  | [google-chrome]:                                Not installed | 
|  | [Selenium2Library]:                             3.0.0 | 
|  | [SeleniumLibrary]:                              3.3.1 | 
|  | [SSHLibrary]:                                   3.3.0 | 
|  | [requests]:                                     2.22.0 | 
|  | [XvfbRobot]:                                    1.2.2 | 
|  | [robotremoteserver]:                            1.1 | 
|  | [redfish]:                                      2.1.1 | 
|  | [robotframework-angularjs]:                     0.0.10 | 
|  | [robotframework-scplibrary]:                    1.2.0 | 
|  | [robotframework-extendedselenium2library]:      0.9.1 | 
|  | [host OS]:                                      Ubuntu 16.04.6 LTS | 
|  | """ | 
|  |  | 
|  | quiet = 1 | 
|  | versions = collections.OrderedDict() | 
|  | for package in ['python', 'robot', 'firefox', 'google-chrome']: | 
|  | # Note: "robot --version" returns 0x00000000000000fb. | 
|  | # Note: If package does not exist, 0x7f is returned. | 
|  | rc, version = gc.shell_cmd(package + " --version", | 
|  | valid_rcs=[0, 0x7f, 0xfb]) | 
|  | versions[package] = "Not installed" if rc == 0x7f else version.rstrip('\n') | 
|  |  | 
|  | versions.update(import_versions) | 
|  |  | 
|  | for package in ['robotframework-angularjs', 'robotframework-scplibrary', | 
|  | 'robotframework-extendedselenium2library']: | 
|  | rc, version = gc.shell_cmd("pip show " + package | 
|  | + " | grep Version | sed -re 's/.*: //g'") | 
|  | versions[package] = "Not installed" if not version else version.rstrip('\n') | 
|  |  | 
|  | rc, version = gc.shell_cmd("lsb_release -d -s") | 
|  | versions["host OS"] = "Failed" if not version else version.rstrip('\n') | 
|  | return versions |