George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 1 | *** Settings *** |
| 2 | Documentation This module is for SSH connection override to QEMU |
| 3 | ... based openbmc systems. |
| 4 | |
George Keishing | ffcf02a | 2016-09-13 01:55:28 -0500 | [diff] [blame] | 5 | Library SSHLibrary timeout=30 seconds |
George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 6 | Library OperatingSystem |
root | 442f0ef | 2016-08-04 20:23:05 +0000 | [diff] [blame] | 7 | Library Collections |
George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 8 | |
| 9 | *** Variables *** |
| 10 | |
| 11 | *** Keywords *** |
| 12 | Open Connection And Log In |
root | 442f0ef | 2016-08-04 20:23:05 +0000 | [diff] [blame] | 13 | [Documentation] Opens a connection with the given arguments, and logs in. |
| 14 | ... Defaults to logging into the BMC. |
| 15 | [Arguments] ${username}=${OPENBMC_USERNAME} |
| 16 | ... ${password}=${OPENBMC_PASSWORD} &{connection_args} |
| 17 | |
| 18 | # username The username to log into the connection with. |
| 19 | # password The password to log into the connection with. |
| 20 | # connection_args A dictionary of acceptable inputs to the Open Connection |
| 21 | # keyword. This includes, but is not limited to, the |
| 22 | # following: |
| 23 | # host, alias, port, timeout, newline, prompt, term_type, |
| 24 | # width, height, path_separator, endcoding |
| 25 | # (For more information, please visit the SSHLibrary doc) |
| 26 | |
| 27 | # Of the above arguments to Open Connection, this keyword |
| 28 | # will provide the following default values: |
| 29 | # host ${OPENBMC_HOST} |
| 30 | |
| 31 | # If no host was provided, add ${OPENBMC_HOST} to the dictionary |
| 32 | ${has_host}= Run Keyword and Return Status |
| 33 | ... Dictionary Should Contain Key ${connection_args} host |
| 34 | Run Keyword If ${has_host} == ${FALSE} |
| 35 | ... Set To Dictionary ${connection_args} host=${OPENBMC_HOST} |
| 36 | |
| 37 | Run Keyword If |
| 38 | ... '${SSH_PORT}' != '${EMPTY}' and '${HTTPS_PORT}' != '${EMPTY}' |
George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 39 | ... User input SSH and HTTPs Ports |
| 40 | |
root | 442f0ef | 2016-08-04 20:23:05 +0000 | [diff] [blame] | 41 | # Check to see if a port to connect to was provided. |
| 42 | ${has_port}= Run Keyword and Return Status |
| 43 | ... Dictionary Should Contain Key ${connection_args} port |
George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 44 | |
root | 442f0ef | 2016-08-04 20:23:05 +0000 | [diff] [blame] | 45 | # If the ${SSH_PORT} is set and no port was provided, add the defined port |
| 46 | # to the dictionary and open the connection. Otherwise, open the connection |
| 47 | # with the either the provided port or the default port. |
| 48 | Run Keyword If '${SSH_PORT}' != '${EMPTY}' and ${has_port} == ${FALSE} |
| 49 | ... Run Keywords |
| 50 | ... Set To Dictionary ${connection_args} port=${SSH_PORT} AND |
George Keishing | 314cf85 | 2016-08-26 09:02:16 -0500 | [diff] [blame] | 51 | ... SSHLibrary.Open connection &{connection_args} |
| 52 | ... ELSE Run Keyword SSHLibrary.Open connection &{connection_args} |
root | 442f0ef | 2016-08-04 20:23:05 +0000 | [diff] [blame] | 53 | |
| 54 | Login ${username} ${password} |
George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 55 | |
George Keishing | 4346a41 | 2016-07-19 11:26:49 -0500 | [diff] [blame] | 56 | Open Connection for SCP |
| 57 | Import Library SCPLibrary WITH NAME scp |
| 58 | Run Keyword If '${SSH_PORT}' == '${EMPTY}' scp.Open connection ${OPENBMC_HOST} |
| 59 | ... username=${OPENBMC_USERNAME} password=${OPENBMC_PASSWORD} |
| 60 | ... ELSE Run Keyword scp.Open connection ${OPENBMC_HOST} port=${SSH_PORT} |
| 61 | ... username=${OPENBMC_USERNAME} password=${OPENBMC_PASSWORD} |
| 62 | |
| 63 | |
George Keishing | 4d6c1da | 2016-07-15 05:51:22 -0500 | [diff] [blame] | 64 | User input SSH and HTTPs Ports |
| 65 | [Documentation] Update the global SSH and HTTPs port variable for QEMU |
| 66 | ${port_num}= Convert To Integer ${SSH_PORT} |
| 67 | ${SSH_PORT}= Replace Variables ${port_num} |
| 68 | |
| 69 | ${https_num}= Convert To Integer ${HTTPS_PORT} |
Sridevi Ramesh | 89a8692 | 2016-07-22 01:00:36 -0500 | [diff] [blame] | 70 | Set Global Variable ${AUTH_URI} https://${OPENBMC_HOST}:${https_num} |
Leah McNutt | c9c9cde | 2016-10-07 16:53:52 +0000 | [diff] [blame] | 71 | |
| 72 | Validate Or Open Connection |
| 73 | [Documentation] Checks for an open connection to a host or alias. |
| 74 | [Arguments] ${alias}=None ${host}=${EMPTY} &{connection_args} |
| 75 | |
| 76 | # alias The alias of the connection to validate. |
| 77 | # host The DNS name or IP of the host to validate. |
| 78 | # connection_args A dictionary of arguments to pass to Open Conection |
| 79 | # and Log In (see above) if the connection is not open. May |
| 80 | # contain, but does not need to contain, the host or alias. |
| 81 | |
| 82 | # Check to make sure we have an alias or host to search for. |
| 83 | Run Keyword If '${host}' == '${EMPTY}' Should Not Be Equal ${alias} None |
| 84 | ... msg=Need to provide a host or an alias. values=False |
| 85 | |
| 86 | # Search the dictionary to see if it includes the host and alias. |
| 87 | ${host_exists}= Run Keyword and Return Status |
| 88 | ... Dictionary Should Contain Key ${connection_args} host |
| 89 | ${alias_exists}= Run Keyword and Return Status |
| 90 | ... Dictionary Should Contain Key ${connection_args} alias |
| 91 | |
| 92 | # Add the alias and host back into the dictionary of connection arguments, |
| 93 | # if needed. |
| 94 | Run Keyword If '${host}' != '${EMPTY}' and ${host_exists} == ${FALSE} |
| 95 | ... Set to Dictionary ${connection_args} host ${host} |
| 96 | Run Keyword If '${alias}' != 'None' and ${alias_exists} == ${FALSE} |
| 97 | ... Set to Dictionary ${connection_args} alias ${alias} |
| 98 | |
| 99 | @{open_connections}= Get Connections |
| 100 | # If there are no open connections, open one and return. |
| 101 | Run Keyword If '${open_connections}' == '[]' |
| 102 | ... Open Connection and Log In &{connection_args} |
| 103 | Return From Keyword If '${open_connections}' == '[]' |
| 104 | |
| 105 | # Connect to the alias or host that matches. If both are given, only connect |
| 106 | # to a connection that has both. |
| 107 | :FOR ${connection} IN @{open_connections} |
| 108 | \ Log ${connection} |
| 109 | \ ${alias_match}= Evaluate '${alias}' == '${connection.alias}' |
| 110 | \ ${host_match}= Evaluate '${host}' == '${connection.host}' |
| 111 | \ ${given_alias}= Evaluate '${alias}' != 'None' |
| 112 | \ ${no_alias}= Evaluate '${alias}' == 'None' |
| 113 | \ ${given_host}= Evaluate '${host}' != '${EMPTY}' |
| 114 | \ ${no_host}= Evaluate '${host}' == '${EMPTY}' |
| 115 | \ Run Keyword If |
| 116 | ... ${given_alias} and ${given_host} and ${alias_match} and ${host_match} |
| 117 | ... Run Keywords |
| 118 | ... Switch Connection ${alias} AND |
| 119 | ... Log to Console Found connection. Switched to ${alias} ${host} AND |
| 120 | ... Return From Keyword If ${alias_match} and ${host_match} |
| 121 | ... ELSE Run Keyword If |
| 122 | ... ${given_alias} and ${no_host} and ${alias_match} |
| 123 | ... Run Keywords |
| 124 | ... Switch Connection ${alias} AND |
| 125 | ... Log to Console Found connection. Switched to: ${alias} AND |
| 126 | ... Return From Keyword If ${alias_match} |
| 127 | ... ELSE Run Keyword If |
| 128 | ... ${given_host} and ${no_alias} and ${host_match} |
| 129 | ... Run Keywords |
| 130 | ... Switch Connection ${connection.index} AND |
| 131 | ... Log to Console Found Connection. Switched to: ${host} AND |
| 132 | ... Return From Keyword If ${host_match} |
| 133 | |
| 134 | # If no connections are found, open a connection with the provided args. |
| 135 | Log No connection with provided arguments. Opening a connection. |
| 136 | Open Connection and Log In &{connection_args} |