[VOL-3712] Automatic reconnect of timed out ssh conection to onos
Change-Id: I4f5b84745a5fb3791a70ea02fea3647f71309ca9
diff --git a/libraries/onos.robot b/libraries/onos.robot
index bd9e671..a1542a4 100755
--- a/libraries/onos.robot
+++ b/libraries/onos.robot
@@ -24,6 +24,9 @@
Library OperatingSystem
Resource ./flows.robot
+*** Variables ***
+@{connection_list}
+
*** Keywords ***
Open ONOS SSH Connection
@@ -31,25 +34,60 @@
[Arguments] ${host} ${port} ${user}=karaf ${pass}=karaf
${conn_id}= SSHLibrary.Open Connection ${host} port=${port} timeout=300s alias=ONOS_SSH
SSHLibrary.Login ${user} ${pass}
- [Return] ${conn_id}
+ ${conn_list_entry}= Create Dictionary conn_id=${conn_id} user=${user} pass=${pass}
+ Append To List ${connection_list} ${conn_list_entry}
+ ${conn_list_id}= Get Index From List ${connection_list} ${conn_list_entry}
+ Set Global Variable ${connection_list}
+ [Return] ${conn_list_id}
Execute ONOS CLI Command on open connection
[Documentation] Execute ONOS CLI Command On an Open Connection
- [Arguments] ${connection_alias} ${cmd}
- SSHLibrary.Switch Connection ${connection_alias}
- @{result_values} SSHLibrary.Execute Command ${cmd} return_rc=True
- ... return_stderr=True return_stdout=True
+ [Arguments] ${connection_list_id} ${cmd}
+ ${connection_entry}= Get From List ${connection_list} ${connection_list_id}
+ SSHLibrary.Switch Connection ${connection_entry.conn_id}
+ ${PassOrFail} @{result_values} Run Keyword And Ignore Error SSHLibrary.Execute Command ${cmd}
+ ... return_rc=True return_stderr=True return_stdout=True
+ Run Keyword If '${PassOrFail}'=='FAIL' Reconnect ONOS SSH Connection ${connection_list_id}
+ @{result_values}= Run Keyword If '${PassOrFail}'=='FAIL'
+ ... SSHLibrary.Execute Command ${cmd} return_rc=True return_stderr=True return_stdout=True
+ ... ELSE Set Variable @{result_values}
${output} Set Variable @{result_values}[0]
Log Command output: ${output}
Should Be Empty @{result_values}[1]
Should Be Equal As Integers @{result_values}[2] 0
[Return] ${output}
+Reconnect ONOS SSH Connection
+ [Documentation] Reconnect an SSH Connection
+ [Arguments] ${connection_list_id}
+ ${connection_entry}= Get From List ${connection_list} ${connection_list_id}
+ ${user}= Get From Dictionary ${connection_entry} user
+ ${pass}= Get From Dictionary ${connection_entry} pass
+ ${oldconndata}= Get Connection ${connection_entry.conn_id}
+ SSHLibrary.Switch Connection ${connection_entry.conn_id}
+ SSHLibrary.Close Connection
+ ${conn_id}= SSHLibrary.Open Connection ${oldconndata.host} port=${oldconndata.port}
+ ... timeout=300s alias=ONOS_SSH
+ SSHLibrary.Login ${user} ${pass}
+ ${conn_list_entry}= Create Dictionary conn_id=${conn_id} user=${user} pass=${pass}
+ Set List Value ${connection_list} ${connection_list_id} ${conn_list_entry}
+ Set Global Variable ${connection_list}
+
Close ONOS SSH Connection
[Documentation] Close an SSH Connection
- [Arguments] ${connection_alias}
+ [Arguments] ${connection_list_id}
+ ${connection_entry}= Get From List ${connection_list} ${connection_list_id}
+ ${connection_alias}= Get From Dictionary ${connection_entry} conn_id
+ ${oldconndata}= Get Connection ${connection_entry.conn_id}
SSHLibrary.Switch Connection ${connection_alias}
SSHLibrary.Close Connection
+ Remove From List ${connection_list} ${connection_list_id}
+ Set Global Variable ${connection_list}
+
+Close All ONOS SSH Connections
+ [Documentation] Close all SSH Connection and clear connection list.
+ SSHLibrary.Close All Connections
+ @{connection_list} Create List
Validate OLT Device in ONOS
# FIXME use volt-olts to check that the OLT is ONOS
@@ -528,8 +566,8 @@
Wait for all flows to in ADDED state
[Documentation] Waits until the flows have been provisioned
- [Arguments] ${onos_ssh_connection} ${deviceId} ${workflow} ${uni_count} ${olt_count} ${provisioned}
- ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
+ [Arguments] ${onos_ssh_connection} ${deviceId} ${workflow} ${uni_count} ${olt_count}
+ ... ${provisioned} ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
${targetFlows}= Calculate flows by workflow ${workflow} ${uni_count} ${olt_count} ${provisioned}
... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Wait Until Keyword Succeeds 10m 5s Count ADDED flows