<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-19T00:24:07.825542" rpa="false" schemaversion="5">
<suite id="s1" name="controller-benchmark.txt" source="/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.424583" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:24:08.420601" elapsed="0.004048"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-19T00:24:08.420134" elapsed="0.004601"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.429790" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-19T00:24:08.426171" elapsed="0.003654"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-19T00:24:08.430060" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:08.429936" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.429903" elapsed="0.000235"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.430727" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:24:08.430322" elapsed="0.000468"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.431290" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-19T00:24:08.430961" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-19T00:24:08.431894" elapsed="0.000299"/>
</kw>
<msg time="2026-04-19T00:24:08.432305" level="INFO">${status} = PASS</msg>
<msg time="2026-04-19T00:24:08.432354" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:08.431490" elapsed="0.000888"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.432951" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:08.432544" elapsed="0.000435"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.434503" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:24:08.434208" elapsed="0.000324"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.434957" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:24:08.434678" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.435484" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.435135" elapsed="0.000377"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.438623" elapsed="0.000261"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.439372" level="INFO">${member_ip} = 10.30.170.227</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-19T00:24:08.439040" elapsed="0.000359"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.439545" elapsed="0.000309"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.440668" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-19T00:24:08.440367" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-19T00:24:08.440742" elapsed="0.000057"/>
</return>
<msg time="2026-04-19T00:24:08.440934" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-19T00:24:08.440055" elapsed="0.000904"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-19T00:24:08.441620" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.227:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76ad6278f0d0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-19T00:24:08.441175" elapsed="0.000611"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.441948" elapsed="0.000310"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-19T00:24:08.437929" elapsed="0.004399"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-19T00:24:08.437726" elapsed="0.004649"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-19T00:24:08.435574" elapsed="0.006835"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.443047" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:24:08.442569" elapsed="0.000524"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.443662" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.227'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:24:08.443252" elapsed="0.000453"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.444274" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:24:08.443878" elapsed="0.000439"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-19T00:24:08.433713" elapsed="0.010662"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-19T00:24:08.425799" elapsed="0.018634"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:08.444618" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:08.444502" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.444482" elapsed="0.000205"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.447753" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:08.447365" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.448258" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:24:08.447953" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-19T00:24:08.448328" elapsed="0.000031"/>
</return>
<msg time="2026-04-19T00:24:08.448487" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-19T00:24:08.447037" elapsed="0.001475"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:08.449494" level="INFO">${member_ip} = 10.30.170.227</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.449230" elapsed="0.000290"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.450353" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:08.450480" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.450163" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:08.454305" elapsed="0.000088"/>
</kw>
<status status="NOT RUN" start="2026-04-19T00:24:08.453199" elapsed="0.001273"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.453174" elapsed="0.001378"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.454922" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:08.455139" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.454732" elapsed="0.000516"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.456369" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.227" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:08.455499" elapsed="0.000934"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.457436" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.456689" elapsed="0.000852"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.459599" level="INFO">Length is 0.</msg>
<msg time="2026-04-19T00:24:08.459796" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-19T00:24:08.459105" elapsed="0.000736"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.460473" elapsed="0.000485"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.462527" level="INFO">Logging into '10.30.170.227:22' as 'jenkins'.</msg>
<msg time="2026-04-19T00:24:08.806826" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sun Apr 19 00:24:06 UTC 2026

  System load:  0.0                Processes:             120
  Usage of /:   10.3% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.227
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-03647-37-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-19T00:24:08.462171" elapsed="0.344762"/>
</kw>
<msg time="2026-04-19T00:24:08.807048" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.461632" elapsed="0.345526"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-19T00:24:08.458011" elapsed="0.349265"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.808029" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-19T00:24:08.821698" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-19T00:24:08.822246" level="INFO">${stdout} = </msg>
<msg time="2026-04-19T00:24:08.822580" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-19T00:24:08.807630" elapsed="0.015247"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.823723" elapsed="0.000786"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.827118" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:08.825639" elapsed="0.001574"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-19T00:24:08.827901" elapsed="0.000049"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:08.827479" elapsed="0.000555"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.827436" elapsed="0.000705"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-19T00:24:08.828571" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-19T00:24:08.828274" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.828248" elapsed="0.000602"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-19T00:24:08.828952" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.833931" elapsed="0.000870"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.835679" elapsed="0.000557"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.837062" elapsed="0.000359"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:08.829404" elapsed="0.008091"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-19T00:24:08.452354" elapsed="0.385357"/>
</kw>
<msg time="2026-04-19T00:24:08.837769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.451692" elapsed="0.386149"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-19T00:24:08.451217" elapsed="0.386705"/>
</kw>
<msg time="2026-04-19T00:24:08.837964" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.450695" elapsed="0.387317"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.840543" elapsed="0.000332"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.841039" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.841384" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:08.838296" elapsed="0.003242"/>
</kw>
<msg time="2026-04-19T00:24:08.841630" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-19T00:24:08.449727" elapsed="0.391928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.842084" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:08.841834" elapsed="0.000292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-19T00:24:08.842170" elapsed="0.000033"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-19T00:24:08.448883" elapsed="0.393416"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-19T00:24:08.448698" elapsed="0.393638"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-19T00:24:08.448566" elapsed="0.393808"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-19T00:24:08.444919" elapsed="0.397514"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-19T00:24:08.842578" elapsed="0.000260"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:08.855815" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:08.855688" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.855668" elapsed="0.000217"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.856184" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:08.856290" level="INFO">${current_ssh_connection_object} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.856041" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.856721" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:08.856462" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:08.857170" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:08.856926" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:08.857972" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-19T00:24:08.857715" elapsed="0.000462">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-19T00:24:08.858291" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-19T00:24:08.858337" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:08.857364" elapsed="0.000996"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:08.858657" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-19T00:24:08.858438" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:08.858419" elapsed="0.000378"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:08.859541" level="INFO">${ip_address} = 10.30.170.227</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.859267" elapsed="0.000301"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-19T00:24:08.859615" elapsed="0.000030"/>
</return>
<msg time="2026-04-19T00:24:08.859785" level="INFO">${odl_ip} = 10.30.170.227</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-19T00:24:08.859000" elapsed="0.000812"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.859963" elapsed="0.000413"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.860662" level="INFO">index=4
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:08.860764" level="INFO">${karaf_connection_object} = index=4
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.860547" elapsed="0.000259"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.860949" elapsed="0.002273"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-19T00:24:08.863702" level="INFO">Logging into '10.30.170.227:8101' as 'karaf'.</msg>
<msg time="2026-04-19T00:24:08.864850" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="FAIL" start="2026-04-19T00:24:08.863382" elapsed="0.002819">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:08.869143" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:08.869606" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:08.869931" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:08.867065" elapsed="0.003019"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-19T00:24:08.866488" elapsed="0.003642"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="FAIL" start="2026-04-19T00:24:08.855410" elapsed="0.014810">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:09.888967" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:09.888823" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:09.888793" elapsed="0.000263"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:09.889417" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:09.889536" level="INFO">${current_ssh_connection_object} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:09.889239" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:09.890033" level="INFO">{1: 4}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:09.889714" elapsed="0.000364"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:09.890472" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:09.890226" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:09.891064" elapsed="0.000186"/>
</kw>
<msg time="2026-04-19T00:24:09.891353" level="INFO">${status} = PASS</msg>
<msg time="2026-04-19T00:24:09.891400" level="INFO">${old_connection_index} = 4</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:09.890673" elapsed="0.000750"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-19T00:24:09.892269" elapsed="0.000138"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-19T00:24:09.893107" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-19T00:24:09.892910" elapsed="0.000777">Cannot open session, you need to establish a connection first.</status>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:09.892565" elapsed="0.001184"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:09.894252" elapsed="0.000104"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:09.893928" elapsed="0.000473"/>
</kw>
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-04-19T00:24:09.891725" elapsed="0.002720"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:09.891498" elapsed="0.002995"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:09.891480" elapsed="0.003038"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:09.895277" level="INFO">${ip_address} = 10.30.170.227</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:09.895001" elapsed="0.000302"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-19T00:24:09.895356" elapsed="0.000033"/>
</return>
<msg time="2026-04-19T00:24:09.895512" level="INFO">${odl_ip} = 10.30.170.227</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-19T00:24:09.894718" elapsed="0.000818"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:09.895706" elapsed="0.000432"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:09.896467" level="INFO">index=6
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:09.896573" level="INFO">${karaf_connection_object} = index=6
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:09.896358" elapsed="0.000242"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-19T00:24:09.896743" elapsed="0.002332"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-19T00:24:09.899499" level="INFO">Logging into '10.30.170.227:8101' as 'karaf'.</msg>
<msg time="2026-04-19T00:24:09.900880" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="FAIL" start="2026-04-19T00:24:09.899236" elapsed="0.002025">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:09.904127" elapsed="0.000305"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:09.904586" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:09.904888" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:09.902074" elapsed="0.002962"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-19T00:24:09.901537" elapsed="0.003545"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="FAIL" start="2026-04-19T00:24:09.888424" elapsed="0.016741">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:10.923259" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:10.923129" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:10.923107" elapsed="0.000232"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:10.923705" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:10.923836" level="INFO">${current_ssh_connection_object} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:10.923514" elapsed="0.000350"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:10.924307" level="INFO">{1: 6}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:10.924013" elapsed="0.000339"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:10.924740" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:10.924497" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:10.925329" elapsed="0.000184"/>
</kw>
<msg time="2026-04-19T00:24:10.925618" level="INFO">${status} = PASS</msg>
<msg time="2026-04-19T00:24:10.925664" level="INFO">${old_connection_index} = 6</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:10.924956" elapsed="0.000730"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-19T00:24:10.926506" elapsed="0.000138"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-19T00:24:10.927310" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-19T00:24:10.927139" elapsed="0.000707">Cannot open session, you need to establish a connection first.</status>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:10.926818" elapsed="0.001090"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:10.928391" elapsed="0.000103"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:10.928068" elapsed="0.000472"/>
</kw>
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-04-19T00:24:10.925994" elapsed="0.002592"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:10.925760" elapsed="0.002929"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:10.925743" elapsed="0.002972"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:10.929480" level="INFO">${ip_address} = 10.30.170.227</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:10.929209" elapsed="0.000297"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-19T00:24:10.929554" elapsed="0.000031"/>
</return>
<msg time="2026-04-19T00:24:10.929709" level="INFO">${odl_ip} = 10.30.170.227</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-19T00:24:10.928934" elapsed="0.000800"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:10.929898" elapsed="0.000410"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:10.930583" level="INFO">index=8
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:10.930684" level="INFO">${karaf_connection_object} = index=8
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:10.930474" elapsed="0.000237"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-19T00:24:10.930868" elapsed="0.002257"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-19T00:24:10.933543" level="INFO">Logging into '10.30.170.227:8101' as 'karaf'.</msg>
<msg time="2026-04-19T00:24:10.934911" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="FAIL" start="2026-04-19T00:24:10.933282" elapsed="0.002010">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:10.938178" elapsed="0.000305"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:10.938636" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:10.938940" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:10.936127" elapsed="0.002963"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-19T00:24:10.935568" elapsed="0.003573"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="FAIL" start="2026-04-19T00:24:10.922782" elapsed="0.016441">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:11.956570" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:11.956416" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:11.956386" elapsed="0.000287"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.957108" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:11.957235" level="INFO">${current_ssh_connection_object} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:11.956890" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:11.957747" level="INFO">{1: 8}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:11.957417" elapsed="0.000392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:11.958202" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:11.957957" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.958822" elapsed="0.000192"/>
</kw>
<msg time="2026-04-19T00:24:11.959120" level="INFO">${status} = PASS</msg>
<msg time="2026-04-19T00:24:11.959166" level="INFO">${old_connection_index} = 8</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.958409" elapsed="0.000779"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-19T00:24:11.960020" elapsed="0.000168"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.960965" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.960754" elapsed="0.000759">Cannot open session, you need to establish a connection first.</status>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.960348" elapsed="0.001228"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:11.962077" elapsed="0.000110"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.961738" elapsed="0.000495"/>
</kw>
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-04-19T00:24:11.959478" elapsed="0.002798"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:11.959262" elapsed="0.003064"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:11.959245" elapsed="0.003106"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:11.963103" level="INFO">${ip_address} = 10.30.170.227</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.962832" elapsed="0.000297"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-19T00:24:11.963177" elapsed="0.000033"/>
</return>
<msg time="2026-04-19T00:24:11.963334" level="INFO">${odl_ip} = 10.30.170.227</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-19T00:24:11.962550" elapsed="0.000809"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.963509" elapsed="0.000435"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.964233" level="INFO">index=10
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:11.964334" level="INFO">${karaf_connection_object} = index=10
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:11.964112" elapsed="0.000248"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.964500" elapsed="0.002263"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.967204" level="INFO">Logging into '10.30.170.227:8101' as 'karaf'.</msg>
<msg time="2026-04-19T00:24:11.968410" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.966937" elapsed="0.001881">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:11.971652" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.972138" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:11.972445" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:11.969613" elapsed="0.002979"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-19T00:24:11.969102" elapsed="0.003536"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.955962" elapsed="0.016762">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<msg time="2026-04-19T00:24:11.972835" level="FAIL">Keyword 'Open_Controller_Karaf_Console_On_Background' failed after retrying for 3 seconds. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-19T00:24:08.843570" elapsed="3.129360">Keyword 'Open_Controller_Karaf_Console_On_Background' failed after retrying for 3 seconds. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:08.843202" elapsed="3.129796"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-19T00:24:08.843067" elapsed="3.129974"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-19T00:24:08.842903" elapsed="3.130183"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-19T00:24:08.425140" elapsed="3.548018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:11.975738" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:11.975627" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:11.975609" elapsed="0.000213"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:11.980230" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:11.980124" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:11.980107" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:11.981250" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:11.980865" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:24:11.981722" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:24:11.981428" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-19T00:24:11.981807" elapsed="0.000031"/>
</return>
<msg time="2026-04-19T00:24:11.981966" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-19T00:24:11.980527" elapsed="0.001463"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:11.987232" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:11.987125" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:11.987107" elapsed="0.000192"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:11.988391" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:11.988285" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:11.988268" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:11.989045" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.988591" elapsed="0.000481"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.989497" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-19T00:24:11.989223" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.990427" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.990111" elapsed="0.001003">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-04-19T00:24:11.991262" level="INFO">${status_write} = FAIL</msg>
<msg time="2026-04-19T00:24:11.991308" level="INFO">${message_write} = Cannot open session, you need to establish a connection first.</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.989679" elapsed="0.001652"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-19T00:24:11.992480" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.991913" elapsed="0.001375">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-04-19T00:24:11.993440" level="INFO">${status_wait} = FAIL</msg>
<msg time="2026-04-19T00:24:11.993486" level="INFO">${message_wait} = Cannot open session, you need to establish a connection first.</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.991489" elapsed="0.002020"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-19T00:24:11.994388" level="FAIL">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot"</msg>
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.993821" elapsed="0.000671">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot"</status>
</kw>
<status status="FAIL" start="2026-04-19T00:24:11.993583" elapsed="0.001040">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot"</status>
</branch>
<status status="FAIL" start="2026-04-19T00:24:11.993564" elapsed="0.001094">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot"</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:11.994828" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:11.995048" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-19T00:24:11.994916" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-04-19T00:24:11.994899" elapsed="0.000287"/>
</if>
<return>
<value>${message_wait}</value>
<status status="NOT RUN" start="2026-04-19T00:24:11.995219" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:11.997162" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:11.998294" elapsed="0.000303"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:11.999237" elapsed="0.000252"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:11.996172" elapsed="0.003384"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-19T00:24:11.995503" elapsed="0.004203"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.988035" elapsed="0.011775">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot"</status>
</kw>
<msg time="2026-04-19T00:24:11.999916" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-19T00:24:11.999961" level="INFO">${message} = Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/dsbenchmark.robot"</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.987442" elapsed="0.012542"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-19T00:24:12.000165" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:12.000060" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:12.000042" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:12.000993" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:12.000862" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:12.000844" elapsed="0.000218"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.002854" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:12.002968" level="INFO">${current_ssh_connection_object} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:12.001212" elapsed="0.001782"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:12.003407" level="INFO">{1: 10}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:12.003143" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:12.003859" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:12.003596" elapsed="0.000308"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:12.004399" elapsed="0.000371"/>
</kw>
<msg time="2026-04-19T00:24:12.004888" level="INFO">${status} = PASS</msg>
<msg time="2026-04-19T00:24:12.004936" level="INFO">${old_connection_index} = 10</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:12.004055" elapsed="0.000904"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-19T00:24:12.006064" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.008244" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-19T00:24:12.007845" elapsed="0.000874">Cannot open session, you need to establish a connection first.</status>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:12.006534" elapsed="0.002276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:12.010488" elapsed="0.000280"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:12.009113" elapsed="0.001736"/>
</kw>
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-04-19T00:24:12.005267" elapsed="0.005729"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:12.005034" elapsed="0.006013"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:12.005016" elapsed="0.006058"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:12.011940" level="INFO">${ip_address} = 10.30.170.227</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:12.011538" elapsed="0.000429"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-19T00:24:12.012015" elapsed="0.000030"/>
</return>
<msg time="2026-04-19T00:24:12.012166" level="INFO">${odl_ip} = 10.30.170.227</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-19T00:24:12.011272" elapsed="0.000951"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:12.012373" elapsed="0.000396"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.013054" level="INFO">index=13
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:12.013158" level="INFO">${karaf_connection_object} = index=13
host=10.30.170.227
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:12.012948" elapsed="0.000236"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-19T00:24:12.013338" elapsed="0.002080"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.015853" level="INFO">Logging into '10.30.170.227:8101' as 'karaf'.</msg>
<msg time="2026-04-19T00:24:12.016700" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="FAIL" start="2026-04-19T00:24:12.015576" elapsed="0.001519">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:12.020508" elapsed="0.000634"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:12.021483" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-19T00:24:12.021935" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:12.018059" elapsed="0.004087"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-19T00:24:12.017394" elapsed="0.004803"/>
</kw>
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="FAIL" start="2026-04-19T00:24:12.000604" elapsed="0.021678">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:12.022604" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-19T00:24:12.022678" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="FAIL" start="2026-04-19T00:24:11.986836" elapsed="0.035949">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<msg time="2026-04-19T00:24:12.022904" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-19T00:24:12.022947" level="INFO">${output} = NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.982393" elapsed="0.040577"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:12.023289" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-19T00:24:12.023045" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:12.023028" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-19T00:24:11.982250" elapsed="0.041139"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-19T00:24:11.982054" elapsed="0.041369"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-19T00:24:11.979841" elapsed="0.043635"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-19T00:24:11.973765" elapsed="0.049764"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:11.973311" elapsed="0.050259"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-19T00:24:08.419633" elapsed="3.603984"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-19T00:24:12.023754" elapsed="0.000197"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:12.024102" elapsed="0.000178"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-19T00:24:12.025933" level="INFO">Length is 0.</msg>
<msg time="2026-04-19T00:24:12.026010" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-19T00:24:12.025646" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:12.026226" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.027396" level="INFO">Logging into '10.30.171.242:22' as 'jenkins'.</msg>
<msg time="2026-04-19T00:24:12.698509" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sun Apr 19 00:24:12 UTC 2026

  System load:  0.0                Processes:             104
  Usage of /:   19.3% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.242
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

9 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-03647-37-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-19T00:24:12.027078" elapsed="0.671586"/>
</kw>
<msg time="2026-04-19T00:24:12.698757" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:12.026709" elapsed="0.672148"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-19T00:24:12.025188" elapsed="0.673786"/>
</kw>
<msg time="2026-04-19T00:24:12.699028" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:12.024808" elapsed="0.674266"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-19T00:24:12.024468" elapsed="0.674682"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.705213" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-19T00:24:12.713596" level="INFO">'/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/../../../../tools/mdsal_benchmark/dsbenchmark.py' -&gt; '/home/jenkins//dsbenchmark.py'</msg>
<arg>/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/suites/controller/benchmark/../../../../tools/mdsal_benchmark/${tool}</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-19T00:24:12.699387" elapsed="0.014271"/>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:12.719605" level="INFO">${cd_and_command} = cd '.' &amp;&amp; virtualenv /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-19T00:24:12.719265" elapsed="0.000367"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-19T00:24:12.721108" level="INFO">Executing command 'cd '.' &amp;&amp; virtualenv /tmp/defaultvenv'.</msg>
<msg time="2026-04-19T00:24:13.208016" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-19T00:24:13.208295" level="INFO">${stdout} = created virtual environment CPython3.10.12.final.0-64 in 289ms
  creator CPython3Posix(dest=/tmp/defaultvenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=b...</msg>
<msg time="2026-04-19T00:24:13.208400" level="INFO">${stderr} = </msg>
<msg time="2026-04-19T00:24:13.208491" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-19T00:24:12.720913" elapsed="0.487630"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-19T00:24:13.210718" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-19T00:24:13.209853" elapsed="0.001009"/>
</kw>
<msg time="2026-04-19T00:24:13.211082" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-19T00:24:13.211180" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:13.208998" elapsed="0.002233"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:13.212585" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:13.211592" elapsed="0.001052"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:13.215041" level="INFO">created virtual environment CPython3.10.12.final.0-64 in 289ms
  creator CPython3Posix(dest=/tmp/defaultvenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/jenkins/.local/share/virtualenv)
    added seed packages: pip==22.0.2, setuptools==59.6.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:13.214454" elapsed="0.000698"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:13.216044" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:13.215474" elapsed="0.000661"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:13.217008" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:13.216449" elapsed="0.000656"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-19T00:24:13.213608" elapsed="0.003716"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:13.212861" elapsed="0.004546"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:13.212786" elapsed="0.004678"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-19T00:24:13.218100" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:13.217588" elapsed="0.000623"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:13.217551" elapsed="0.000710"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-19T00:24:13.218415" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-19T00:24:13.218321" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:13.218306" elapsed="0.000197"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:13.218644" elapsed="0.000022"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-19T00:24:12.720349" elapsed="0.498415"/>
</kw>
<msg time="2026-04-19T00:24:13.218846" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:12.719788" elapsed="0.499110"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the virtualenv /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-19T00:24:12.718635" elapsed="0.500376"/>
</kw>
<msg time="2026-04-19T00:24:13.219066" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:12.714610" elapsed="0.504500"/>
</kw>
<arg>virtualenv ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-19T00:24:12.714254" elapsed="0.504959"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Virtual_Env_Run_Cmd_At_Cwd" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:13.225757" level="INFO">${cd_and_command} = cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install --upgrade pip; deactivate</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-19T00:24:13.225431" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-19T00:24:13.227465" level="INFO">Executing command 'cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install --upgrade pip; deactivate'.</msg>
<msg time="2026-04-19T00:24:15.453688" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-19T00:24:15.454412" level="INFO">${stdout} = Requirement already satisfied: pip in /tmp/defaultvenv/lib/python3.10/site-packages (22.0.2)
Collecting pip
  Downloading pip-26.0.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━...</msg>
<msg time="2026-04-19T00:24:15.454583" level="INFO">${stderr} = </msg>
<msg time="2026-04-19T00:24:15.454680" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-19T00:24:13.227201" elapsed="2.227533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-19T00:24:15.458173" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-19T00:24:15.456635" elapsed="0.001770"/>
</kw>
<msg time="2026-04-19T00:24:15.458736" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-19T00:24:15.458872" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:15.455316" elapsed="0.003609"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:15.460958" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:15.459297" elapsed="0.001722"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:15.464588" level="INFO">Requirement already satisfied: pip in /tmp/defaultvenv/lib/python3.10/site-packages (22.0.2)
Collecting pip
  Downloading pip-26.0.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 28.6 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.0.2
    Uninstalling pip-22.0.2:
      Successfully uninstalled pip-22.0.2
Successfully installed pip-26.0.1</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:15.464154" elapsed="0.000549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:15.465787" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:15.465369" elapsed="0.000658"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:15.467196" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:15.466734" elapsed="0.000603"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-19T00:24:15.462594" elapsed="0.004822"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:15.461213" elapsed="0.006327"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:15.461162" elapsed="0.006409"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-19T00:24:15.467757" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:15.467630" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:15.467612" elapsed="0.000268"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-19T00:24:15.468048" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-19T00:24:15.467934" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:15.467918" elapsed="0.000228"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:15.468300" elapsed="0.000024"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-19T00:24:13.226613" elapsed="2.241816"/>
</kw>
<msg time="2026-04-19T00:24:15.468489" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:13.225993" elapsed="2.242553"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the source /tmp/defaultvenv/bin/activate; pip install --upgrade pip; deactivate.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-19T00:24:13.224832" elapsed="2.243797"/>
</kw>
<msg time="2026-04-19T00:24:15.468684" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:13.221216" elapsed="2.247516"/>
</kw>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-19T00:24:13.220516" elapsed="2.248332"/>
</kw>
<msg time="2026-04-19T00:24:15.468902" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Cwd_Should_Pass</arg>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:13.220148" elapsed="2.248801"/>
</kw>
<arg>pip install --upgrade pip</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs given command within activated virtual env and returns stdout.</doc>
<status status="PASS" start="2026-04-19T00:24:13.219820" elapsed="2.249209"/>
</kw>
<msg time="2026-04-19T00:24:15.469073" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${upgrade_pip}</arg>
<arg>Virtual_Env_Run_Cmd_At_Cwd</arg>
<arg>pip install --upgrade pip</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:13.219362" elapsed="2.249757"/>
</kw>
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="PASS" start="2026-04-19T00:24:12.713933" elapsed="2.755261"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Virtual_Env_Run_Cmd_At_Cwd" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:15.476540" level="INFO">${cd_and_command} = cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install requests; deactivate</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-19T00:24:15.476207" elapsed="0.000361"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-19T00:24:15.478160" level="INFO">Executing command 'cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install requests; deactivate'.</msg>
<msg time="2026-04-19T00:24:16.926971" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-19T00:24:16.927511" level="INFO">${stdout} = Collecting requests
  Downloading requests-2.33.1-py3-none-any.whl.metadata (4.8 kB)
Collecting charset_normalizer&lt;4,&gt;=2 (from requests)
  Downloading charset_normalizer-3.4.7-cp310-cp310-manylinux201...</msg>
<msg time="2026-04-19T00:24:16.927621" level="INFO">${stderr} = </msg>
<msg time="2026-04-19T00:24:16.927713" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-19T00:24:15.477885" elapsed="1.449881"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.931126" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-19T00:24:16.929742" elapsed="0.001658"/>
</kw>
<msg time="2026-04-19T00:24:16.931932" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-19T00:24:16.932036" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:16.928337" elapsed="0.003751"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.934280" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:16.932456" elapsed="0.001886"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.938906" level="INFO">Collecting requests
  Downloading requests-2.33.1-py3-none-any.whl.metadata (4.8 kB)
Collecting charset_normalizer&lt;4,&gt;=2 (from requests)
  Downloading charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB)
Collecting idna&lt;4,&gt;=2.5 (from requests)
  Downloading idna-3.11-py3-none-any.whl.metadata (8.4 kB)
Collecting urllib3&lt;3,&gt;=1.26 (from requests)
  Downloading urllib3-2.6.3-py3-none-any.whl.metadata (6.9 kB)
Collecting certifi&gt;=2023.5.7 (from requests)
  Downloading certifi-2026.2.25-py3-none-any.whl.metadata (2.5 kB)
Downloading requests-2.33.1-py3-none-any.whl (64 kB)
Downloading charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (216 kB)
Downloading idna-3.11-py3-none-any.whl (71 kB)
Downloading urllib3-2.6.3-py3-none-any.whl (131 kB)
Downloading certifi-2026.2.25-py3-none-any.whl (153 kB)
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests

Successfully installed certifi-2026.2.25 charset_normalizer-3.4.7 idna-3.11 requests-2.33.1 urllib3-2.6.3</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:16.938479" elapsed="0.000541"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.940300" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:16.939901" elapsed="0.000496"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.941715" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:16.941307" elapsed="0.000526"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-19T00:24:16.935505" elapsed="0.006402"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:16.934535" elapsed="0.007594"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:16.934485" elapsed="0.007672"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-19T00:24:16.942338" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:16.942214" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:16.942198" elapsed="0.000210"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-19T00:24:16.942569" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-19T00:24:16.942460" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:16.942444" elapsed="0.000218"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.942818" elapsed="0.000022"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-19T00:24:15.477313" elapsed="1.465635"/>
</kw>
<msg time="2026-04-19T00:24:16.943009" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:15.476721" elapsed="1.466343"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the source /tmp/defaultvenv/bin/activate; pip install requests; deactivate.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-19T00:24:15.475483" elapsed="1.467690"/>
</kw>
<msg time="2026-04-19T00:24:16.943231" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:15.471469" elapsed="1.471807"/>
</kw>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-19T00:24:15.470901" elapsed="1.472478"/>
</kw>
<msg time="2026-04-19T00:24:16.943432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Cwd_Should_Pass</arg>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:15.470431" elapsed="1.473044"/>
</kw>
<arg>pip install ${package}</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs given command within activated virtual env and returns stdout.</doc>
<status status="PASS" start="2026-04-19T00:24:15.470038" elapsed="1.473536"/>
</kw>
<msg time="2026-04-19T00:24:16.943622" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Virtual_Env_Run_Cmd_At_Cwd</arg>
<arg>pip install ${package}</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:15.469645" elapsed="1.474020"/>
</kw>
<arg>requests</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="PASS" start="2026-04-19T00:24:15.469394" elapsed="1.474413"/>
</kw>
<kw name="Run_Karaf_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.946996" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:16.946591" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.947475" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:24:16.947178" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-19T00:24:16.947546" elapsed="0.000028"/>
</return>
<msg time="2026-04-19T00:24:16.947700" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-19T00:24:16.946263" elapsed="0.001462"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-19T00:24:16.948369" level="INFO">${member_ip} = 10.30.170.227</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-19T00:24:16.948100" elapsed="0.000296"/>
</kw>
<kw name="Safe_Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:16.949289" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:16.949177" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:16.949160" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:24:16.950735" level="INFO">index=15
host=10.30.171.242
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-19T00:24:16.950854" level="INFO">${current_connection} = index=15
host=10.30.171.242
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-19T00:24:16.950604" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:24:16.955163" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:16.955056" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:16.955037" elapsed="0.000195"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:24:16.955371" elapsed="0.000476"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-19T00:24:16.956271" level="INFO">Logging into '10.30.170.227:8101' as 'karaf'.</msg>
<msg time="2026-04-19T00:24:16.957884" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.956007" elapsed="0.002328">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<kw name="Write" owner="SSHLibrary">
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.958506" elapsed="0.000022"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.958669" elapsed="0.000021"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.958852" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.959011" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.959165" elapsed="0.000020"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-19T00:24:16.959225" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.170.227
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.954684" elapsed="0.004659">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<msg time="2026-04-19T00:24:16.959393" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.951032" elapsed="0.008409"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-19T00:24:16.962764" elapsed="0.000163"/>
</kw>
<msg time="2026-04-19T00:24:16.962970" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:16.962027" elapsed="0.001006"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.963190" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:16.963380" elapsed="0.000021"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-19T00:24:16.959745" elapsed="0.003718"/>
</kw>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.949960" elapsed="0.013615">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<msg time="2026-04-19T00:24:16.963633" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.949496" elapsed="0.014183"/>
</kw>
<arg>${command}</arg>
<arg>${member_ip}</arg>
<arg>timeout=${timeout}</arg>
<doc>Run Issue_Command_On_Karaf_Console but restore previous connection afterwards.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.948637" elapsed="0.015356">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-19T00:24:16.947969" elapsed="0.016098">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-19T00:24:16.947807" elapsed="0.016323">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</for>
<arg>log:set ${ODL_LOG_LEVEL}</arg>
<doc>Cycle through indices (or all), run karaf command on each.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.944051" elapsed="0.020168">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<doc>Setup imported resources, SSH-login to mininet machine,
create HTTP session, put Python tool to mininet machine.</doc>
<status status="FAIL" start="2026-04-19T00:24:08.419011" elapsed="8.545294">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</kw>
<test id="s1-t1" name="Measure_Both_Datastores_For_One_Node_Odl_Setup" line="73">
<tag>critical</tag>
<tag>singlenode_setup</tag>
<status status="FAIL" start="2026-04-19T00:24:16.964396" elapsed="0.000526">Parent suite setup failed:
NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</test>
<test id="s1-t2" name="Merge_Csvs_Together" line="238">
<doc>Merge created csvs into given file necause plot plugin cannot have more
source files for one graph.</doc>
<status status="FAIL" start="2026-04-19T00:24:16.965123" elapsed="0.000418">Parent suite setup failed:
NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-19T00:24:16.972052" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-19T00:24:16.971700" elapsed="0.000380"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-19T00:24:16.973487" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-19T00:24:17.006700" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-19T00:24:17.006994" level="INFO">${stdout} = </msg>
<msg time="2026-04-19T00:24:17.007094" level="INFO">${stderr} = </msg>
<msg time="2026-04-19T00:24:17.007186" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-19T00:24:16.973306" elapsed="0.033931"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-19T00:24:17.009039" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-19T00:24:17.008410" elapsed="0.000730"/>
</kw>
<msg time="2026-04-19T00:24:17.009354" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-19T00:24:17.009450" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:24:17.007629" elapsed="0.001871"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:24:17.010901" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:24:17.009895" elapsed="0.001066"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:17.013256" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:17.012674" elapsed="0.000679"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:17.014244" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:17.013676" elapsed="0.000703"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-19T00:24:17.015264" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-19T00:24:17.014703" elapsed="0.000623"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-19T00:24:17.011905" elapsed="0.003495"/>
</kw>
<status status="PASS" start="2026-04-19T00:24:17.011135" elapsed="0.004315"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:17.011092" elapsed="0.004391"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-19T00:24:17.015697" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:24:17.015558" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:17.015536" elapsed="0.000277"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-19T00:24:17.016014" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-19T00:24:17.015889" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-19T00:24:17.015868" elapsed="0.000261"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:24:17.016318" elapsed="0.000029"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-19T00:24:16.972755" elapsed="0.043780"/>
</kw>
<msg time="2026-04-19T00:24:17.016610" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:16.972234" elapsed="0.044459"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-19T00:24:16.971107" elapsed="0.045718"/>
</kw>
<msg time="2026-04-19T00:24:17.016898" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-19T00:24:16.966996" elapsed="0.049988"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-19T00:24:16.966622" elapsed="0.050469"/>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="PASS" start="2026-04-19T00:24:16.966402" elapsed="0.050760"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-19T00:24:17.017352" elapsed="0.000453"/>
</kw>
<doc>Cleaning-up</doc>
<status status="PASS" start="2026-04-19T00:24:16.966146" elapsed="0.051741"/>
</kw>
<doc>MD-SAL Data Store benchmarking.

Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This test suite uses the odl-dsbenchmark-impl feature controlled
via dsbenchmark.py tool for testing the MD-SAL Data Store performance.
(see the 'https://wiki.opendaylight.org/view/Controller_Core_Functionality_Tutorials:Tutorials:Data_Store_Benchmarking_and_Data_Access_Patterns')

Based on values in test suite variables it triggers required numbers of
warm-up and measured test runs: odl-dsbenchmark-impl module generates
(towards MD-SAL Data Store) specified structure, type and number of operations.
The test suite performs checks for start-up and test execution timeouts
(Start Measurement, Wait For Results) and basic checks for test runs results
(Check Results). Finally it provides total numbers per operation structure and type
(by default in the perf_per_struct.csv, perf_per_ops.csv files)
suitable for plotting in system test environment. See also the
'https://wiki.opendaylight.org/view/CrossProject:Integration_Group:System_Test:Step_by_Step_Guide#Optional_-_Plot_a_graph_from_your_job'
Included totals can be filtered using the FILTER parameter (RegExp).
Because of the way how graphs are drawn, it is recomended to keep
all test suite variables unchanged as defined for the 1st build.
Parameters WARMUPS, RUNS and accordingly the TIMEOUT value can be changed
for each build if needed. Parameter UNITS defines time units returned
by odl-dsbenchmark-impl module. The dsbenchmark.py tool always returns
values in miliseconds.

When running this robot suite always use --exclude tag for distinguish
the run for 3node setup: need a benchmark for leader and follow (--exclude singlenode_setup)
the run for 1node setup: no followr present (--exclude clustered_setup)</doc>
<status status="FAIL" start="2026-04-19T00:24:07.827082" elapsed="9.190849">Suite setup failed:
NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.227</status>
</suite>
<statistics>
<total>
<stat pass="0" fail="2" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="1" skip="0">critical</stat>
<stat pass="0" fail="1" skip="0">singlenode_setup</stat>
</tag>
<suite>
<stat name="controller-benchmark.txt" id="s1" pass="0" fail="2" skip="0">controller-benchmark.txt</stat>
</suite>
</statistics>
<errors>
<msg time="2026-04-19T00:24:08.223470" level="WARN">Error in file '/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'controller-benchmark.txt' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-19T00:24:08.245649" level="WARN">Error in file '/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'controller-benchmark.txt' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-19T00:24:08.282784" level="WARN">Error in file '/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'controller-benchmark.txt' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-19T00:24:08.356443" level="WARN">Error in file '/w/workspace/controller-csit-1node-benchmark-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'controller-benchmark.txt' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
