blob: 543879d64e095b480a98bce9a6ce230cf1398b8e [file] [log] [blame]
George Keishing4d6c1da2016-07-15 05:51:22 -05001*** Settings ***
2Documentation This module is for SSH connection override to QEMU
3... based openbmc systems.
4
George Keishingffcf02a2016-09-13 01:55:28 -05005Library SSHLibrary timeout=30 seconds
George Keishing4d6c1da2016-07-15 05:51:22 -05006Library OperatingSystem
root442f0ef2016-08-04 20:23:05 +00007Library Collections
George Keishing4d6c1da2016-07-15 05:51:22 -05008
9*** Variables ***
10
11*** Keywords ***
12Open Connection And Log In
root442f0ef2016-08-04 20:23:05 +000013 [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,
George Keishing16b3c7b2021-01-28 09:23:37 -060024 # width, height, path_separator, encoding
root442f0ef2016-08-04 20:23:05 +000025 # (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 Keishing4d6c1da2016-07-15 05:51:22 -050039 ... User input SSH and HTTPs Ports
40
root442f0ef2016-08-04 20:23:05 +000041 # 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 Keishing4d6c1da2016-07-15 05:51:22 -050044
root442f0ef2016-08-04 20:23:05 +000045 # 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 Keishing314cf852016-08-26 09:02:16 -050051 ... SSHLibrary.Open connection &{connection_args}
52 ... ELSE Run Keyword SSHLibrary.Open connection &{connection_args}
root442f0ef2016-08-04 20:23:05 +000053
George Keishing939ac382017-10-28 10:35:41 -050054 SSHLibrary.Login ${username} ${password}
George Keishing4d6c1da2016-07-15 05:51:22 -050055
George Keishing4346a412016-07-19 11:26:49 -050056Open Connection for SCP
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050057 [Documentation] Open a connection for SCP.
George Keishing4346a412016-07-19 11:26:49 -050058 Import Library SCPLibrary WITH NAME scp
59 Run Keyword If '${SSH_PORT}' == '${EMPTY}' scp.Open connection ${OPENBMC_HOST}
60 ... username=${OPENBMC_USERNAME} password=${OPENBMC_PASSWORD}
61 ... ELSE Run Keyword scp.Open connection ${OPENBMC_HOST} port=${SSH_PORT}
62 ... username=${OPENBMC_USERNAME} password=${OPENBMC_PASSWORD}
63
64
George Keishing4d6c1da2016-07-15 05:51:22 -050065User input SSH and HTTPs Ports
66 [Documentation] Update the global SSH and HTTPs port variable for QEMU
67 ${port_num}= Convert To Integer ${SSH_PORT}
68 ${SSH_PORT}= Replace Variables ${port_num}
69
70 ${https_num}= Convert To Integer ${HTTPS_PORT}
Sridevi Ramesh89a86922016-07-22 01:00:36 -050071 Set Global Variable ${AUTH_URI} https://${OPENBMC_HOST}:${https_num}
Leah McNuttc9c9cde2016-10-07 16:53:52 +000072
73Validate Or Open Connection
74 [Documentation] Checks for an open connection to a host or alias.
75 [Arguments] ${alias}=None ${host}=${EMPTY} &{connection_args}
76
77 # alias The alias of the connection to validate.
78 # host The DNS name or IP of the host to validate.
Gunnar Mills28e403b2017-10-25 16:16:38 -050079 # connection_args A dictionary of arguments to pass to Open Connection
Leah McNuttc9c9cde2016-10-07 16:53:52 +000080 # and Log In (see above) if the connection is not open. May
81 # contain, but does not need to contain, the host or alias.
82
83 # Check to make sure we have an alias or host to search for.
84 Run Keyword If '${host}' == '${EMPTY}' Should Not Be Equal ${alias} None
85 ... msg=Need to provide a host or an alias. values=False
86
87 # Search the dictionary to see if it includes the host and alias.
88 ${host_exists}= Run Keyword and Return Status
89 ... Dictionary Should Contain Key ${connection_args} host
90 ${alias_exists}= Run Keyword and Return Status
91 ... Dictionary Should Contain Key ${connection_args} alias
92
93 # Add the alias and host back into the dictionary of connection arguments,
94 # if needed.
95 Run Keyword If '${host}' != '${EMPTY}' and ${host_exists} == ${FALSE}
96 ... Set to Dictionary ${connection_args} host ${host}
97 Run Keyword If '${alias}' != 'None' and ${alias_exists} == ${FALSE}
98 ... Set to Dictionary ${connection_args} alias ${alias}
99
100 @{open_connections}= Get Connections
101 # If there are no open connections, open one and return.
102 Run Keyword If '${open_connections}' == '[]'
103 ... Open Connection and Log In &{connection_args}
104 Return From Keyword If '${open_connections}' == '[]'
105
106 # Connect to the alias or host that matches. If both are given, only connect
107 # to a connection that has both.
Marissa Garza20ccfc72020-06-19 12:51:10 -0500108 FOR ${connection} IN @{open_connections}
109 Log ${connection}
110 ${alias_match}= Evaluate '${alias}' == '${connection.alias}'
111 ${host_match}= Evaluate '${host}' == '${connection.host}'
112 ${given_alias}= Evaluate '${alias}' != 'None'
113 ${no_alias}= Evaluate '${alias}' == 'None'
114 ${given_host}= Evaluate '${host}' != '${EMPTY}'
115 ${no_host}= Evaluate '${host}' == '${EMPTY}'
116 Run Keyword If
117 ... ${given_alias} and ${given_host} and ${alias_match} and ${host_match}
118 ... Run Keywords
119 ... Switch Connection ${alias} AND
120 ... Log to Console Found connection. Switched to ${alias} ${host} AND
121 ... Return From Keyword If ${alias_match} and ${host_match}
122 ... ELSE Run Keyword If
123 ... ${given_alias} and ${no_host} and ${alias_match}
124 ... Run Keywords
125 ... Switch Connection ${alias} AND
126 ... Log to Console Found connection. Switched to: ${alias} AND
127 ... Return From Keyword If ${alias_match}
128 ... ELSE Run Keyword If
129 ... ${given_host} and ${no_alias} and ${host_match}
130 ... Run Keywords
131 ... Switch Connection ${connection.index} AND
132 ... Log to Console Found Connection. Switched to: ${host} AND
133 ... Return From Keyword If ${host_match}
134 END
Leah McNuttc9c9cde2016-10-07 16:53:52 +0000135 # If no connections are found, open a connection with the provided args.
136 Log No connection with provided arguments. Opening a connection.
137 Open Connection and Log In &{connection_args}
Vijay1a52c992017-09-19 08:37:26 -0500138
139
140Clear System Entry From Knownhosts
141 [Documentation] Delete OPENBMC_HOST entry from known_hosts file.
142 ${cmd}= Set Variable sed '/${OPENBMC_HOST}/d' -i ~/.ssh/known_hosts
143 ${rc} ${output}= Run and Return RC and Output ${cmd}
144