<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-06-14T00:24:22.968787" rpa="false" schemaversion="5">
<suite id="s1" name="netconf-scale-max-devices.txt">
<suite id="s1-s1" name="Ready" source="/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready">
<suite id="s1-s1-s1" name="Netconfready" source="/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.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-06-14T00:24:23.608629" 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-06-14T00:24:23.604206" elapsed="0.004504"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-06-14T00:24:23.603722" elapsed="0.005075"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.614135" 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-06-14T00:24:23.610305" elapsed="0.003863"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-06-14T00:24:23.614416" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:23.614282" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:23.614247" elapsed="0.000247"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.615084" 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-06-14T00:24:23.614668" elapsed="0.000463"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.615625" 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-06-14T00:24:23.615300" elapsed="0.000354"/>
</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-06-14T00:24:23.616239" elapsed="0.000298"/>
</kw>
<msg time="2026-06-14T00:24:23.616647" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:23.616711" 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-06-14T00:24:23.615850" elapsed="0.000887"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.617293" 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-06-14T00:24:23.616906" elapsed="0.000414"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.619020" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-14T00:24:23.618735" elapsed="0.000316"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.619589" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-14T00:24:23.619202" elapsed="0.000415"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.620138" 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-06-14T00:24:23.619791" elapsed="0.000375"/>
</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-06-14T00:24:23.623477" elapsed="0.000254"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.624231" level="INFO">${member_ip} = 10.30.170.84</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-06-14T00:24:23.623903" elapsed="0.000355"/>
</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-06-14T00:24:23.624408" elapsed="0.000319"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.625575" 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-06-14T00:24:23.625245" elapsed="0.000362"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-14T00:24:23.625661" elapsed="0.000061"/>
</return>
<msg time="2026-06-14T00:24:23.625856" 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-06-14T00:24:23.624934" elapsed="0.000947"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-14T00:24:23.626554" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.84:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x70f76aa20610&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-06-14T00:24:23.626108" elapsed="0.000633"/>
</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-06-14T00:24:23.626906" elapsed="0.000198"/>
</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-06-14T00:24:23.622806" elapsed="0.004358"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:23.622596" elapsed="0.004613"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-06-14T00:24:23.620227" elapsed="0.007015"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.627899" 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-06-14T00:24:23.627466" elapsed="0.000478"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.628508" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.84'}</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-06-14T00:24:23.628103" elapsed="0.000449"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.629120" 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-06-14T00:24:23.628725" 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-06-14T00:24:23.618240" elapsed="0.010983"/>
</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-06-14T00:24:23.609932" elapsed="0.019349"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-06-14T00:24:23.629510" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:23.629350" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:23.629329" elapsed="0.000270"/>
</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-06-14T00:24:23.632899" 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-06-14T00:24:23.632502" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.633374" 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-06-14T00:24:23.633081" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-14T00:24:23.633463" elapsed="0.000037"/>
</return>
<msg time="2026-06-14T00:24:23.633650" 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-06-14T00:24:23.632182" elapsed="0.001494"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:23.634669" level="INFO">${member_ip} = 10.30.170.84</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-06-14T00:24:23.634405" elapsed="0.000305"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:23.635556" 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-06-14T00:24:23.635665" 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-06-14T00:24:23.635365" elapsed="0.000340"/>
</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-06-14T00:24:23.639646" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:23.638607" elapsed="0.001166"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:23.638561" elapsed="0.001284"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:23.640503" 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-06-14T00:24:23.640784" 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-06-14T00:24:23.640114" elapsed="0.000769"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.641844" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.84" 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-06-14T00:24:23.641143" elapsed="0.000867"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:23.643156" 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-06-14T00:24:23.642279" elapsed="0.000977"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-06-14T00:24:23.644718" level="INFO">Length is 0.</msg>
<msg time="2026-06-14T00:24:23.644799" 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-06-14T00:24:23.644334" elapsed="0.000489"/>
</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-06-14T00:24:23.645061" elapsed="0.000331"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-06-14T00:24:23.646324" level="INFO">Logging into '10.30.170.84:22' as 'jenkins'.</msg>
<msg time="2026-06-14T00:24:24.041510" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-173-generic x86_64)

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

 System information as of Sun Jun 14 00:24:21 UTC 2026

  System load:  0.0                Processes:             153
  Usage of /:   5.1% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.84
  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-59795-45-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-06-14T00:24:23.646000" elapsed="0.395675"/>
</kw>
<msg time="2026-06-14T00:24:24.041785" 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-06-14T00:24:23.645619" elapsed="0.396270"/>
</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-06-14T00:24:23.643613" elapsed="0.398528"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-06-14T00:24:24.043004" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-06-14T00:24:24.055931" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-06-14T00:24:24.056812" level="INFO">${stdout} = </msg>
<msg time="2026-06-14T00:24:24.057130" 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-06-14T00:24:24.042506" elapsed="0.014841"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:24.057990" elapsed="0.001164"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:24.061357" 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-06-14T00:24:24.060460" elapsed="0.001136"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-06-14T00:24:24.062296" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:24.061870" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:24.061791" elapsed="0.000727"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-06-14T00:24:24.063135" elapsed="0.000099"/>
</return>
<status status="PASS" start="2026-06-14T00:24:24.062749" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:24.062662" elapsed="0.000753"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-06-14T00:24:24.063551" elapsed="0.000025"/>
</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-06-14T00:24:24.069016" elapsed="0.000583"/>
</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-06-14T00:24:24.070115" elapsed="0.000338"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:24.070821" elapsed="0.000237"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:24.064435" elapsed="0.006739"/>
</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-06-14T00:24:23.637553" elapsed="0.433994"/>
</kw>
<msg time="2026-06-14T00:24:24.071733" 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-06-14T00:24:23.636848" elapsed="0.434972"/>
</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-06-14T00:24:23.636360" elapsed="0.435577"/>
</kw>
<msg time="2026-06-14T00:24:24.071999" 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-06-14T00:24:23.635859" elapsed="0.436207"/>
</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-06-14T00:24:24.075077" elapsed="0.000318"/>
</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-06-14T00:24:24.075554" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:24.075928" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:24.072573" elapsed="0.003508"/>
</kw>
<msg time="2026-06-14T00:24:24.076173" 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-06-14T00:24:23.634935" elapsed="0.441263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:24.076708" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:24.076402" elapsed="0.000350"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-06-14T00:24:24.076798" 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-06-14T00:24:23.634057" elapsed="0.442874"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:23.633883" elapsed="0.443086"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-06-14T00:24:23.633748" elapsed="0.443259"/>
</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-06-14T00:24:23.629860" elapsed="0.447205"/>
</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-06-14T00:24:24.077217" elapsed="0.000217"/>
</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-06-14T00:24:24.091116" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:24.090995" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:24.090974" elapsed="0.000213"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:24.091492" 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-06-14T00:24:24.091598" 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-06-14T00:24:24.091342" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:24.092044" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:24.091787" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:24.092522" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:24.092232" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:24.093357" 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-06-14T00:24:24.093114" elapsed="0.000444">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-06-14T00:24:24.093673" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:24.093734" 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-06-14T00:24:24.092756" elapsed="0.001002"/>
</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-06-14T00:24:24.094055" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:24.093836" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:24.093815" elapsed="0.000340"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:24.094922" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:24.094635" elapsed="0.000313"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:24.094996" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:24.095149" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:24.094353" elapsed="0.000820"/>
</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-06-14T00:24:24.095323" elapsed="0.000437"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:24.096038" level="INFO">index=4
host=10.30.170.84
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-06-14T00:24:24.096141" level="INFO">${karaf_connection_object} = index=4
host=10.30.170.84
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_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:24.095925" 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-06-14T00:24:24.096338" elapsed="0.002433"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:24.099287" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:24.100320" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:24.098999" elapsed="0.002742">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:24.104792" elapsed="0.000393"/>
</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-06-14T00:24:24.105346" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:24.105642" elapsed="0.000133"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:24.102568" elapsed="0.003259"/>
</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-06-14T00:24:24.102042" elapsed="0.003831"/>
</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-06-14T00:24:24.090708" elapsed="0.015256">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:25.130566" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:25.130411" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:25.130376" elapsed="0.000284"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:25.131057" 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-06-14T00:24:25.131178" 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-06-14T00:24:25.130864" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:25.131662" 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-06-14T00:24:25.131356" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:25.132122" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:25.131878" elapsed="0.000288"/>
</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-06-14T00:24:25.132716" elapsed="0.000185"/>
</kw>
<msg time="2026-06-14T00:24:25.133007" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:25.133052" 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-06-14T00:24:25.132326" elapsed="0.000749"/>
</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-06-14T00:24:25.133917" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:25.134798" 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-06-14T00:24:25.134592" elapsed="0.000894">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-06-14T00:24:25.134271" elapsed="0.001352"/>
</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-06-14T00:24:25.136133" elapsed="0.000101"/>
</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-06-14T00:24:25.135807" elapsed="0.000527"/>
</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-06-14T00:24:25.133368" elapsed="0.003011"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:25.133150" elapsed="0.003278"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:25.133131" elapsed="0.003324"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:25.137214" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:25.136949" elapsed="0.000292"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:25.137289" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:25.137442" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:25.136659" elapsed="0.000807"/>
</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-06-14T00:24:25.137618" elapsed="0.000460"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:25.138422" level="INFO">index=6
host=10.30.170.84
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-06-14T00:24:25.138524" level="INFO">${karaf_connection_object} = index=6
host=10.30.170.84
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_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:25.138314" 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-06-14T00:24:25.138710" elapsed="0.002450"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:25.141578" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:25.142748" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:25.141321" elapsed="0.001808">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:25.146165" elapsed="0.000378"/>
</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-06-14T00:24:25.146716" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:25.147009" elapsed="0.000094"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:25.143967" elapsed="0.003185"/>
</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-06-14T00:24:25.143411" elapsed="0.003786"/>
</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-06-14T00:24:25.129993" elapsed="0.017285">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:26.165206" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:26.165063" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:26.165036" elapsed="0.000263"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:26.165676" 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-06-14T00:24:26.165813" 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-06-14T00:24:26.165486" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:26.166298" 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-06-14T00:24:26.165991" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:26.166743" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:26.166487" elapsed="0.000301"/>
</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-06-14T00:24:26.167322" elapsed="0.000180"/>
</kw>
<msg time="2026-06-14T00:24:26.167635" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:26.167707" 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-06-14T00:24:26.166947" elapsed="0.000790"/>
</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-06-14T00:24:26.168564" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:26.169423" 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-06-14T00:24:26.169251" elapsed="0.000841">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-06-14T00:24:26.168934" elapsed="0.001291"/>
</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-06-14T00:24:26.170726" 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-06-14T00:24:26.170391" elapsed="0.000536"/>
</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-06-14T00:24:26.168064" elapsed="0.002910"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:26.167832" elapsed="0.003251"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:26.167807" elapsed="0.003303"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:26.171883" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:26.171599" elapsed="0.000311"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:26.171957" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:26.172112" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:26.171315" elapsed="0.000821"/>
</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-06-14T00:24:26.172287" elapsed="0.000418"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:26.172975" level="INFO">index=8
host=10.30.170.84
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-06-14T00:24:26.173075" level="INFO">${karaf_connection_object} = index=8
host=10.30.170.84
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_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:26.172869" elapsed="0.000232"/>
</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-06-14T00:24:26.173244" elapsed="0.002388"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:26.176071" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:26.177171" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:26.175807" elapsed="0.001742">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:26.180618" elapsed="0.000407"/>
</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-06-14T00:24:26.181184" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:26.181468" 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-06-14T00:24:26.178362" elapsed="0.003254"/>
</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-06-14T00:24:26.177851" elapsed="0.003811"/>
</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-06-14T00:24:26.164638" elapsed="0.017126">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.199197" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.199050" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.199017" elapsed="0.000271"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.199636" 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-06-14T00:24:27.199767" 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-06-14T00:24:27.199461" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.200238" 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-06-14T00:24:27.199944" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.200665" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:27.200426" elapsed="0.000299"/>
</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-06-14T00:24:27.201419" elapsed="0.000207"/>
</kw>
<msg time="2026-06-14T00:24:27.201743" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:27.201790" 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-06-14T00:24:27.200882" elapsed="0.000931"/>
</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-06-14T00:24:27.202626" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.203552" 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-06-14T00:24:27.203379" elapsed="0.000821">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-06-14T00:24:27.202987" elapsed="0.001348"/>
</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-06-14T00:24:27.204836" elapsed="0.000100"/>
</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-06-14T00:24:27.204500" elapsed="0.000535"/>
</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-06-14T00:24:27.202120" elapsed="0.002961"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:27.201888" elapsed="0.003241"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.201869" elapsed="0.003286"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:27.205927" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:27.205643" elapsed="0.000311"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:27.206001" elapsed="0.000033"/>
</return>
<msg time="2026-06-14T00:24:27.206155" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.205357" elapsed="0.000822"/>
</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-06-14T00:24:27.206327" elapsed="0.000414"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.207007" level="INFO">index=10
host=10.30.170.84
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-06-14T00:24:27.207106" level="INFO">${karaf_connection_object} = index=10
host=10.30.170.84
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-06-14T00:24:27.206903" elapsed="0.000228"/>
</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-06-14T00:24:27.207272" elapsed="0.002368"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.210080" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:27.211276" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.209815" elapsed="0.001842">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.214639" elapsed="0.000403"/>
</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-06-14T00:24:27.215200" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:27.215486" elapsed="0.000095"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.212453" elapsed="0.003178"/>
</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-06-14T00:24:27.211949" elapsed="0.003728"/>
</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-06-14T00:24:27.198643" elapsed="0.017134">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<msg time="2026-06-14T00:24:27.215868" 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.84</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-06-14T00:24:24.078202" elapsed="3.137758">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.84</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-06-14T00:24:24.077831" elapsed="3.138197"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:24.077652" elapsed="3.138420"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-06-14T00:24:24.077494" elapsed="3.138617"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-06-14T00:24:23.609192" elapsed="3.606981"/>
</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-06-14T00:24:27.218880" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.218770" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.218750" elapsed="0.000199"/>
</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-06-14T00:24:27.223775" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.223649" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.223631" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.224789" 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-06-14T00:24:27.224385" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.225261" 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-06-14T00:24:27.224971" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-14T00:24:27.225331" elapsed="0.000029"/>
</return>
<msg time="2026-06-14T00:24:27.225482" 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-06-14T00:24:27.224060" elapsed="0.001451"/>
</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-06-14T00:24:27.230997" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.230892" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.230874" 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-06-14T00:24:27.232338" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.232164" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.232146" elapsed="0.000329"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:27.233037" 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-06-14T00:24:27.232613" elapsed="0.000464"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.233563" 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-06-14T00:24:27.233305" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.235568" 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-06-14T00:24:27.235160" elapsed="0.000921">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:27.236243" level="INFO">${status_write} = FAIL</msg>
<msg time="2026-06-14T00:24:27.236315" 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-06-14T00:24:27.233846" elapsed="0.002506"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.238473" 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-06-14T00:24:27.237955" elapsed="0.001099">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:27.239213" level="INFO">${status_wait} = FAIL</msg>
<msg time="2026-06-14T00:24:27.239284" 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-06-14T00:24:27.236601" elapsed="0.002720"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.240406" level="FAIL">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.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-06-14T00:24:27.239806" elapsed="0.000777">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.robot"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:27.239480" elapsed="0.001301">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.robot"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:27.239459" elapsed="0.001375">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.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-06-14T00:24:27.240993" 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-06-14T00:24:27.241303" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:27.241139" elapsed="0.000304"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:24:27.241120" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="NOT RUN" start="2026-06-14T00:24:27.241504" elapsed="0.000033"/>
</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-06-14T00:24:27.243394" elapsed="0.000333"/>
</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-06-14T00:24:27.243929" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:27.244257" elapsed="0.000096"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.242744" elapsed="0.001713"/>
</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-06-14T00:24:27.241837" elapsed="0.002711"/>
</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-06-14T00:24:27.231821" elapsed="0.012810">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.robot"</status>
</kw>
<msg time="2026-06-14T00:24:27.244898" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:27.244943" level="INFO">${message} = Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.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-06-14T00:24:27.231209" elapsed="0.013757"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:27.245152" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.245046" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.245024" elapsed="0.000194"/>
</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-06-14T00:24:27.246024" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.245914" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.245897" elapsed="0.000198"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.246512" 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-06-14T00:24:27.246615" 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-06-14T00:24:27.246241" elapsed="0.000400"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.247081" 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-06-14T00:24:27.246804" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.247529" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:27.247271" elapsed="0.000300"/>
</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-06-14T00:24:27.248086" elapsed="0.000345"/>
</kw>
<msg time="2026-06-14T00:24:27.248594" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:27.248640" 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-06-14T00:24:27.247740" elapsed="0.000922"/>
</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-06-14T00:24:27.249933" elapsed="0.000315"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.251436" 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-06-14T00:24:27.251284" elapsed="0.000592">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-06-14T00:24:27.250536" elapsed="0.001424"/>
</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-06-14T00:24:27.252889" elapsed="0.000098"/>
</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-06-14T00:24:27.252221" elapsed="0.000834"/>
</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-06-14T00:24:27.249054" elapsed="0.004080"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:27.248841" elapsed="0.004342"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.248821" elapsed="0.004387"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:27.254212" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:27.253722" elapsed="0.000516"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:27.254324" elapsed="0.000030"/>
</return>
<msg time="2026-06-14T00:24:27.254474" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.253403" elapsed="0.001095"/>
</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-06-14T00:24:27.254719" elapsed="0.000450"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.255434" level="INFO">index=13
host=10.30.170.84
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-06-14T00:24:27.255530" level="INFO">${karaf_connection_object} = index=13
host=10.30.170.84
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-06-14T00:24:27.255331" elapsed="0.000225"/>
</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-06-14T00:24:27.255712" elapsed="0.013583"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.269795" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:27.270990" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.269454" elapsed="0.001904">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.276127" elapsed="0.000755"/>
</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-06-14T00:24:27.277138" elapsed="0.000423"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:27.277824" elapsed="0.000289"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.272166" elapsed="0.006035"/>
</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-06-14T00:24:27.271628" elapsed="0.006620"/>
</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-06-14T00:24:27.245653" elapsed="0.032677">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.278742" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:27.278819" elapsed="0.000017"/>
</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-06-14T00:24:27.230590" elapsed="0.048334">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<msg time="2026-06-14T00:24:27.279029" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:27.279075" level="INFO">${output} = NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.225933" elapsed="0.053165"/>
</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-06-14T00:24:27.279417" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:27.279173" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.279155" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:27.225787" elapsed="0.053731"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-06-14T00:24:27.225582" elapsed="0.053968"/>
</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-06-14T00:24:27.223360" elapsed="0.056242"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-06-14T00:24:27.216760" elapsed="0.062894"/>
</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-06-14T00:24:27.216326" elapsed="0.063414"/>
</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-06-14T00:24:23.603346" elapsed="3.676445"/>
</kw>
<kw name="Set_Netconf_Connector">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.280493" level="INFO">${streamconnector} = /node/controller-config/yang-ext:mount/config:modules/module/sal-restconf-service:json-restconf-service-impl/json-restconf-service-impl</msg>
<var>${streamconnector}</var>
<arg>/node/controller-config/yang-ext:mount/config:modules/module/sal-restconf-service:json-restconf-service-impl/json-restconf-service-impl</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:24:27.280235" elapsed="0.000285"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.282900" level="INFO">${connector} = </msg>
<var>${connector}</var>
<arg>${USE_NETCONF_CONNECTOR}</arg>
<arg>${streamconnector}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:24:27.280677" elapsed="0.002248"/>
</kw>
<return>
<value>${connector}</value>
<status status="PASS" start="2026-06-14T00:24:27.283010" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:27.283165" level="INFO">${connector} = </msg>
<var>${connector}</var>
<doc>Sets netconf connector verify url according to the vanadium and False combination</doc>
<status status="PASS" start="2026-06-14T00:24:27.280008" elapsed="0.003181"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.287981" level="INFO">${netconf_connector} = </msg>
<arg>${netconf_connector}</arg>
<arg>${connector}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-06-14T00:24:27.283340" elapsed="0.004688"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>A workaround for EOF error follows. TODO: Create a test case for the EOF bug, possibly tagged "exclude".</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-06-14T00:24:27.288189" elapsed="0.000212"/>
</kw>
<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-06-14T00:24:27.302987" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:27.302859" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.302840" elapsed="0.000217"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.303345" 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-06-14T00:24:27.303446" 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-06-14T00:24:27.303204" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.303900" level="INFO">{1: 13}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:27.303625" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:27.304332" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:27.304088" elapsed="0.000287"/>
</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-06-14T00:24:27.304903" elapsed="0.000180"/>
</kw>
<msg time="2026-06-14T00:24:27.305180" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:27.305225" level="INFO">${old_connection_index} = 13</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-06-14T00:24:27.304530" elapsed="0.000717"/>
</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-06-14T00:24:27.306080" elapsed="0.000139"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.306872" 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-06-14T00:24:27.306710" elapsed="0.000641">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-06-14T00:24:27.306378" elapsed="0.001035"/>
</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-06-14T00:24:27.307930" elapsed="0.000096"/>
</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-06-14T00:24:27.307591" elapsed="0.000481"/>
</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-06-14T00:24:27.305562" elapsed="0.002553"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:27.305322" elapsed="0.002841"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:27.305303" elapsed="0.002885"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:27.308929" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:27.308645" elapsed="0.000311"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:27.309003" elapsed="0.000030"/>
</return>
<msg time="2026-06-14T00:24:27.309152" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.308382" elapsed="0.000794"/>
</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-06-14T00:24:27.309325" elapsed="0.000434"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.310033" level="INFO">index=15
host=10.30.170.84
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-06-14T00:24:27.310132" level="INFO">${karaf_connection_object} = index=15
host=10.30.170.84
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-06-14T00:24:27.309930" elapsed="0.000228"/>
</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-06-14T00:24:27.310300" elapsed="0.002395"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:27.313163" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:27.314110" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.312902" elapsed="0.001578">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:27.317483" elapsed="0.000320"/>
</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-06-14T00:24:27.317961" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:27.318246" elapsed="0.000096"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:27.315281" elapsed="0.003112"/>
</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-06-14T00:24:27.314773" elapsed="0.003665"/>
</kw>
<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-06-14T00:24:27.301023" elapsed="0.017494">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.338327" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.338165" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.338134" elapsed="0.000282"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.338811" 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-06-14T00:24:28.338937" 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-06-14T00:24:28.338601" elapsed="0.000362"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.339440" level="INFO">{1: 15}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.339124" elapsed="0.000361"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.339918" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.339632" elapsed="0.000330"/>
</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-06-14T00:24:28.340514" elapsed="0.000199"/>
</kw>
<msg time="2026-06-14T00:24:28.340813" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:28.340858" level="INFO">${old_connection_index} = 15</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-06-14T00:24:28.340123" elapsed="0.000757"/>
</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-06-14T00:24:28.341724" elapsed="0.000135"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.342511" 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-06-14T00:24:28.342343" elapsed="0.000692">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-06-14T00:24:28.342019" 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-06-14T00:24:28.343622" elapsed="0.000130"/>
</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-06-14T00:24:28.343305" elapsed="0.000493"/>
</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-06-14T00:24:28.341200" elapsed="0.002643"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:28.340954" elapsed="0.002937"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.340936" elapsed="0.002981"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.344658" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:28.344393" elapsed="0.000307"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:28.344749" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:28.344903" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.344122" elapsed="0.000805"/>
</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-06-14T00:24:28.345079" elapsed="0.000406"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.345835" level="INFO">index=17
host=10.30.170.84
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-06-14T00:24:28.345936" level="INFO">${karaf_connection_object} = index=17
host=10.30.170.84
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-06-14T00:24:28.345728" elapsed="0.000235"/>
</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-06-14T00:24:28.346106" elapsed="0.002400"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.348947" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:28.350026" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.348669" elapsed="0.001731">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.353403" elapsed="0.000318"/>
</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-06-14T00:24:28.353881" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.354166" elapsed="0.000093"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.351210" elapsed="0.003099"/>
</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-06-14T00:24:28.350672" elapsed="0.003682"/>
</kw>
<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-06-14T00:24:28.336344" elapsed="0.018087">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<msg time="2026-06-14T00:24:28.354514" level="FAIL">Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</msg>
<arg>2x</arg>
<arg>1s</arg>
<arg>KarafKeywords.Open_Controller_Karaf_Console_On_Background</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-06-14T00:24:27.288557" elapsed="1.066046">Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<arg>Starting Netconf readiness test suite</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="NOT RUN" start="2026-06-14T00:24:28.359070" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="${DEBUG_LOGGING_FOR_EVERYTHING}">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set DEBUG</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-06-14T00:24:28.359495" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:28.359166" elapsed="0.000387"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:24:28.359148" elapsed="0.000430"/>
</if>
<kw name="Create Session" owner="RequestsLibrary">
<arg>ses</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-14T00:24:28.359754" elapsed="0.000022"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="NOT RUN" start="2026-06-14T00:24:28.360023" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. Setup requests library and log into karaf.log that the netconf readiness wait starts.</doc>
<status status="FAIL" start="2026-06-14T00:24:23.602938" elapsed="4.757198">Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<test id="s1-s1-s1-t1" name="Check_Whether_Netconf_Topology_Is_Ready" line="84">
<doc>Checks netconf readiness.</doc>
<status status="FAIL" start="2026-06-14T00:24:28.360225" elapsed="0.000487">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</test>
<test id="s1-s1-s1-t2" name="Wait_For_Netconf_Connector" line="97">
<doc>Wait for the Netconf to go up for configurable time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-06-14T00:24:28.360925" elapsed="0.000385">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</test>
<test id="s1-s1-s1-t3" name="Wait_Even_Longer" line="105">
<doc>Bugs such as 7175 may require to wait longer till netconf-connector works.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-06-14T00:24:28.361489" elapsed="0.000404">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</test>
<test id="s1-s1-s1-t4" name="Check_For_Bug_5014" line="114">
<doc>If Netconf appears to be down, it may be due to bug 5014. Check if it is so and fail if yes.
Bug 5014 is about Netconf playing dead on boot until a device
configuration request is sent to it. To uncover this attempt to
configure and then deconfigure a device and then check if Netconf
is now up and running. If that turns out to be true, fail the case
as this signifies the bug 5014 to be present. Skip this testcase
if Netconf is detected to be up and running.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-06-14T00:24:28.362069" elapsed="0.001041">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</test>
<test id="s1-s1-s1-t5" name="Check_Whether_Netconf_Can_Pretty_Print" line="132">
<doc>Make one request to netconf-connector and see if it works.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-06-14T00:24:28.363326" elapsed="0.000443">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</test>
<test id="s1-s1-s1-t6" name="Wait_For_MDSAL" line="141">
<doc>Wait for the MDSAL feature to become online</doc>
<status status="FAIL" start="2026-06-14T00:24:28.363939" elapsed="0.000320">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<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-06-14T00:24:28.371486" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.371377" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.371359" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.372520" 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-06-14T00:24:28.372135" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.373013" 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-06-14T00:24:28.372716" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-14T00:24:28.373084" elapsed="0.000029"/>
</return>
<msg time="2026-06-14T00:24:28.373235" 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-06-14T00:24:28.371813" elapsed="0.001446"/>
</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-06-14T00:24:28.378604" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.378497" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.378479" elapsed="0.000196"/>
</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-06-14T00:24:28.379732" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.379607" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.379589" elapsed="0.000211"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.380148" level="INFO">${karaf_connection_index} = 17</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-06-14T00:24:28.379936" elapsed="0.000237"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.380486" 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-06-14T00:24:28.380322" elapsed="0.000189"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.381194" 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-06-14T00:24:28.381000" elapsed="0.000637">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:28.381760" level="INFO">${status_write} = FAIL</msg>
<msg time="2026-06-14T00:24:28.381805" 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-06-14T00:24:28.380660" elapsed="0.001168"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.382506" 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-06-14T00:24:28.382316" elapsed="0.000704">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:28.383127" level="INFO">${status_wait} = FAIL</msg>
<msg time="2026-06-14T00:24:28.383170" 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-06-14T00:24:28.381988" elapsed="0.001205"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.383847" level="FAIL">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</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-06-14T00:24:28.383478" elapsed="0.000429">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:28.383266" elapsed="0.000703">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:28.383247" elapsed="0.000887">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.384546" level="INFO">Cannot open session, you need to establish a connection first.</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.384295" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.385236" level="FAIL">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</msg>
<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="FAIL" start="2026-06-14T00:24:28.384924" elapsed="0.000370">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:28.384706" elapsed="0.000649">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:28.384672" elapsed="0.000715">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-06-14T00:24:28.385432" elapsed="0.000025"/>
</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-06-14T00:24:28.386513" elapsed="0.000378"/>
</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-06-14T00:24:28.387048" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.387333" elapsed="0.000094"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.386209" elapsed="0.001267"/>
</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-06-14T00:24:28.385720" elapsed="0.001801"/>
</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-06-14T00:24:28.379345" elapsed="0.008327">Several failures occurred:

1) Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"

2) Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<msg time="2026-06-14T00:24:28.387797" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:28.387840" level="INFO">${message} = Several failures occurred:

1) Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"

2) Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Endi...</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-06-14T00:24:28.378839" elapsed="0.009025"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:28.388045" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.387939" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.387920" elapsed="0.000191"/>
</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-06-14T00:24:28.388857" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.388745" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.388728" elapsed="0.000196"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.389211" 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-06-14T00:24:28.389312" 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-06-14T00:24:28.389081" elapsed="0.000256"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.389757" level="INFO">{1: 17}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.389487" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.390186" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.389948" elapsed="0.000281"/>
</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-06-14T00:24:28.390742" elapsed="0.000176"/>
</kw>
<msg time="2026-06-14T00:24:28.391014" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:28.391059" level="INFO">${old_connection_index} = 17</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-06-14T00:24:28.390381" elapsed="0.000700"/>
</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-06-14T00:24:28.391904" elapsed="0.000134"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.392677" 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-06-14T00:24:28.392515" elapsed="0.000608">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-06-14T00:24:28.392197" elapsed="0.000985"/>
</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-06-14T00:24:28.393657" elapsed="0.000116"/>
</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-06-14T00:24:28.393344" elapsed="0.000474"/>
</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-06-14T00:24:28.391370" elapsed="0.002491"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:28.391156" elapsed="0.002787"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.391137" elapsed="0.002833"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.394715" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:28.394437" elapsed="0.000305"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:28.394789" elapsed="0.000029"/>
</return>
<msg time="2026-06-14T00:24:28.394939" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.394173" elapsed="0.000791"/>
</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-06-14T00:24:28.395113" elapsed="0.000389"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.395961" level="INFO">index=20
host=10.30.170.84
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-06-14T00:24:28.396062" level="INFO">${karaf_connection_object} = index=20
host=10.30.170.84
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-06-14T00:24:28.395709" elapsed="0.000379"/>
</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-06-14T00:24:28.396232" elapsed="0.002225"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.398887" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:28.399940" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.398615" elapsed="0.001692">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.403264" elapsed="0.000318"/>
</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-06-14T00:24:28.403755" elapsed="0.000142"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.404035" elapsed="0.000093"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.401091" elapsed="0.003091"/>
</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-06-14T00:24:28.400570" elapsed="0.003658"/>
</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-06-14T00:24:28.388491" elapsed="0.015825">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<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-06-14T00:24:28.405010" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.404905" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.404887" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.405422" level="INFO">${karaf_connection_index} = 20</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-06-14T00:24:28.405212" elapsed="0.000235"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.405778" 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-06-14T00:24:28.405594" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.406466" 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-06-14T00:24:28.406280" elapsed="0.000617">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:28.407003" level="INFO">${status_write} = FAIL</msg>
<msg time="2026-06-14T00:24:28.407047" 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-06-14T00:24:28.405952" elapsed="0.001118"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.407783" 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-06-14T00:24:28.407577" elapsed="0.000673">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:28.408355" level="INFO">${status_wait} = FAIL</msg>
<msg time="2026-06-14T00:24:28.408399" 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-06-14T00:24:28.407228" elapsed="0.001226"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.409078" level="FAIL">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</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-06-14T00:24:28.408760" elapsed="0.000376">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:28.408531" elapsed="0.000667">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:28.408512" elapsed="0.000719">Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.409624" level="INFO">Cannot open session, you need to establish a connection first.</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.409381" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.410270" level="FAIL">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</msg>
<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="FAIL" start="2026-06-14T00:24:28.409959" elapsed="0.000368">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:28.409749" elapsed="0.000639">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:28.409731" elapsed="0.000689">Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-06-14T00:24:28.410464" elapsed="0.000032"/>
</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-06-14T00:24:28.411745" elapsed="0.000298"/>
</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-06-14T00:24:28.412200" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.412489" elapsed="0.000094"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.411394" elapsed="0.001240"/>
</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-06-14T00:24:28.410759" elapsed="0.001920"/>
</kw>
<msg time="2026-06-14T00:24:28.412860" level="INFO">${message} = Cannot open session, you need to establish a connection first.</msg>
<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="FAIL" start="2026-06-14T00:24:28.404641" elapsed="0.008245">Several failures occurred:

1) Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"

2) Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-06-14T00:24:28.412942" elapsed="0.000027"/>
</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-06-14T00:24:28.378214" elapsed="0.034907">Several failures occurred:

1) NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84

2) Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"

3) Failed to see prompt after sending the command: log:log "ROBOT MESSAGE: Ending Netconf readiness test suite"</status>
</kw>
<msg time="2026-06-14T00:24:28.413218" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:28.413260" level="INFO">${output} = Several failures occurred:

1) NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84

2) Failed to send the command: log:log "ROBOT MESSAGE: Ending Netconf readiness tes...</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-06-14T00:24:28.373639" elapsed="0.039645"/>
</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-06-14T00:24:28.413598" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:28.413357" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.413339" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:28.373500" elapsed="0.040216"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-06-14T00:24:28.373317" elapsed="0.040433"/>
</for>
<arg>Ending Netconf readiness test suite</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-06-14T00:24:28.369256" elapsed="0.044548"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-06-14T00:24:28.414022" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-06-14T00:24:28.413945" elapsed="0.000155"/>
</kw>
<doc>Destroy all sessions in the requests library and log into karaf.log that the netconf readiness wait is over.</doc>
<status status="PASS" start="2026-06-14T00:24:28.364779" elapsed="0.049372"/>
</kw>
<doc>netconf-connector readiness test suite.

Copyright (c) 2015,2016 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


Try to detect whether Netconf is up and running and wait for
it for a configurable time if it is not yet up and running.

This is achieved by the test Check_Whether_Netconf_Topology_Is_Ready. This test case
does not use controller-config device. This test case is skipped (Pass Execution) if
the usage of controller-config device is indicated.
Testing itself is done by creating a netconf test device configured
to all odl nodes one by one and check if GET works from mounted
device. GET is done from all the odl nodes and it works for both, 1 or 3 nodes
setup.

The next test cases are basically dedicated to test readiness of the netconf using
controller-config device. This device is created when odl-netconf-connector-ssh|all
feature is installed. Robot variable USE_NETCONF_CONNECTOR should be set to True.
Connector test cases change behavior depending on False. If True,
they check data mounted behind controller-config is readable, if False they only check
topology-netconf is readable.

Some testsuites expect netconf-connector to be ready as soon as possible and will
fail if it is not. We want to see a failure if this is the cause of the failure.


The usage of netconf-connector happens in other suites than netconf,
especially bgpcep to configure odl's bgp peers. Testing the readiness
of the netconf-connector must be invoked by the Robot invocation
argument USE_NETCONF_CONNECTOR. By default it is set to False and
test jobs should be responsible to set it to True if needed. In the
default configuration the affected test cases waits for the netconf
topology to appear only.

If the netconf-connector is not ready upon startup and it's usage is set
to True (as seen by the second test case failing), the next case starts
to repeat the query for a minute to see whether it is going "to fix itself"
within the minute. If yes, then the testcase will pass, which
indicates that the "ODL cooldown" of 1 minute is not long enough
to allow for netconf-connector to initialize properly.
If this fails, one more check with even longer timeout is run.
If the Check_Whether_Netconf_Is_Up_And_Running pass, then the next test
case does nothing.

The other test case then checks whether Netconf can pretty print
data. This sometimes makes problems, most likely due to too
new Robot Requests library with an interface incompatible with
this test suite.</doc>
<status status="FAIL" start="2026-06-14T00:24:23.009860" elapsed="5.404322">Suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</suite>
<status status="FAIL" start="2026-06-14T00:24:23.008680" elapsed="5.406346"/>
</suite>
<suite id="s1-s2" name="Max Devices" source="/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-14T00:24:28.522101" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.84:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x70f76921ae50&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${REST_API}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-06-14T00:24:28.521742" elapsed="0.000613"/>
</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-06-14T00:24:28.522602" elapsed="0.000203"/>
</kw>
<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-06-14T00:24:28.528596" 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-06-14T00:24:28.523708" elapsed="0.004937"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-06-14T00:24:28.523456" elapsed="0.005270"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.534045" 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-06-14T00:24:28.530122" elapsed="0.003953"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-06-14T00:24:28.534291" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.534165" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.534139" elapsed="0.000225"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.534970" 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-06-14T00:24:28.534577" elapsed="0.000438"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.535510" 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-06-14T00:24:28.535177" elapsed="0.000364"/>
</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-06-14T00:24:28.536135" elapsed="0.000302"/>
</kw>
<msg time="2026-06-14T00:24:28.536568" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:28.536632" 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-06-14T00:24:28.535777" elapsed="0.000887"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.537291" 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-06-14T00:24:28.536887" elapsed="0.000430"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.538374" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-14T00:24:28.538079" elapsed="0.000333"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.538893" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-14T00:24:28.538602" elapsed="0.000318"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.539461" 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-06-14T00:24:28.539082" elapsed="0.000417"/>
</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-06-14T00:24:28.543003" elapsed="0.000277"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.543818" level="INFO">${member_ip} = 10.30.170.84</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-06-14T00:24:28.543471" elapsed="0.000379"/>
</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-06-14T00:24:28.544003" elapsed="0.000263"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.545079" 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-06-14T00:24:28.544772" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-14T00:24:28.545151" elapsed="0.000040"/>
</return>
<msg time="2026-06-14T00:24:28.545347" 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-06-14T00:24:28.544460" elapsed="0.000922"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-14T00:24:28.546014" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.84:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x70f7693f5690&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-06-14T00:24:28.545565" elapsed="0.000572"/>
</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-06-14T00:24:28.546402" elapsed="0.000201"/>
</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-06-14T00:24:28.542363" elapsed="0.004302"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:28.542174" elapsed="0.004553"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-06-14T00:24:28.539582" elapsed="0.007179"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.547372" 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-06-14T00:24:28.546938" elapsed="0.000479"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.548104" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.84'}</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-06-14T00:24:28.547609" elapsed="0.000538"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.548779" 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-06-14T00:24:28.548307" elapsed="0.000533"/>
</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-06-14T00:24:28.537581" elapsed="0.011339"/>
</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-06-14T00:24:28.529656" elapsed="0.019342"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-06-14T00:24:28.549223" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.549089" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.549063" elapsed="0.000227"/>
</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-06-14T00:24:28.552701" 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-06-14T00:24:28.552170" elapsed="0.000570"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.553226" 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-06-14T00:24:28.552925" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-14T00:24:28.553295" elapsed="0.000029"/>
</return>
<msg time="2026-06-14T00:24:28.553448" 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-06-14T00:24:28.551842" elapsed="0.001630"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.554598" level="INFO">${member_ip} = 10.30.170.84</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-06-14T00:24:28.554246" elapsed="0.000389"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.555535" 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-06-14T00:24:28.555636" 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-06-14T00:24:28.555359" elapsed="0.000304"/>
</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-06-14T00:24:28.560392" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:28.559785" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.559765" elapsed="0.000750"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.561121" 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-06-14T00:24:28.561338" 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-06-14T00:24:28.560721" elapsed="0.000664"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.562270" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.84" 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-06-14T00:24:28.561629" elapsed="0.000737"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.563519" 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-06-14T00:24:28.562650" elapsed="0.000917"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.565180" level="INFO">Length is 0.</msg>
<msg time="2026-06-14T00:24:28.565344" 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-06-14T00:24:28.564833" elapsed="0.000551"/>
</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-06-14T00:24:28.565713" elapsed="0.000437"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.567239" level="INFO">Logging into '10.30.170.84:22' as 'jenkins'.</msg>
<msg time="2026-06-14T00:24:28.903378" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-173-generic x86_64)

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

 System information as of Sun Jun 14 00:24:21 UTC 2026

  System load:  0.0                Processes:             153
  Usage of /:   5.1% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.84
  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.


Last login: Sun Jun 14 00:24:23 2026 from 10.30.171.181
[?2004h[jenkins@releng-59795-45-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-06-14T00:24:28.566918" elapsed="0.336565"/>
</kw>
<msg time="2026-06-14T00:24:28.903553" 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-06-14T00:24:28.566477" elapsed="0.337191"/>
</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-06-14T00:24:28.564009" elapsed="0.339813"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.904775" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-06-14T00:24:28.917583" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-06-14T00:24:28.917762" level="INFO">${stdout} = </msg>
<msg time="2026-06-14T00:24:28.917860" 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-06-14T00:24:28.904135" elapsed="0.013771"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.918194" elapsed="0.000465"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.919754" 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-06-14T00:24:28.919219" elapsed="0.000633"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-06-14T00:24:28.920253" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.920011" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.919983" elapsed="0.000424"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-06-14T00:24:28.920711" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-06-14T00:24:28.920486" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.920468" elapsed="0.000414"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-06-14T00:24:28.920938" elapsed="0.000016"/>
</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-06-14T00:24:28.924236" elapsed="0.000435"/>
</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-06-14T00:24:28.924953" elapsed="0.000266"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.925462" elapsed="0.000207"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.921392" elapsed="0.004361"/>
</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-06-14T00:24:28.558879" elapsed="0.367038"/>
</kw>
<msg time="2026-06-14T00:24:28.925971" 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-06-14T00:24:28.558245" elapsed="0.367777"/>
</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-06-14T00:24:28.556342" elapsed="0.369759"/>
</kw>
<msg time="2026-06-14T00:24:28.926185" 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-06-14T00:24:28.555837" elapsed="0.370395"/>
</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-06-14T00:24:28.928950" elapsed="0.000310"/>
</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-06-14T00:24:28.929418" elapsed="0.000141"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.929716" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.926519" elapsed="0.003346"/>
</kw>
<msg time="2026-06-14T00:24:28.929955" 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-06-14T00:24:28.554932" elapsed="0.375048"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.930392" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.930150" elapsed="0.000282"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-06-14T00:24:28.930474" elapsed="0.000028"/>
</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-06-14T00:24:28.553888" elapsed="0.376707"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:28.553697" elapsed="0.376935"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-06-14T00:24:28.553526" elapsed="0.377143"/>
</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-06-14T00:24:28.549510" elapsed="0.381243"/>
</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-06-14T00:24:28.930902" elapsed="0.000207"/>
</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-06-14T00:24:28.944611" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:28.944503" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.944485" elapsed="0.000194"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.944975" 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-06-14T00:24:28.945076" 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-06-14T00:24:28.944842" elapsed="0.000259"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.945503" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.945253" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:28.945950" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:28.945709" elapsed="0.000283"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.946733" 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-06-14T00:24:28.946494" elapsed="0.000348">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-06-14T00:24:28.946947" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:28.946992" 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-06-14T00:24:28.946146" elapsed="0.000868"/>
</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-06-14T00:24:28.947308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:28.947088" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:28.947070" elapsed="0.000337"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:28.948146" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:28.947885" elapsed="0.000289"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:28.948223" elapsed="0.000028"/>
</return>
<msg time="2026-06-14T00:24:28.948369" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.947603" elapsed="0.000790"/>
</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-06-14T00:24:28.948542" elapsed="0.000408"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.949255" level="INFO">index=4
host=10.30.170.84
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-06-14T00:24:28.949354" level="INFO">${karaf_connection_object} = index=4
host=10.30.170.84
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_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.949151" elapsed="0.000229"/>
</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-06-14T00:24:28.949526" elapsed="0.002377"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:28.952320" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:28.953205" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.952063" elapsed="0.001558">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:28.956579" elapsed="0.000344"/>
</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-06-14T00:24:28.957082" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:28.957374" elapsed="0.000095"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:28.954424" elapsed="0.003095"/>
</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-06-14T00:24:28.953918" elapsed="0.003646"/>
</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-06-14T00:24:28.944233" elapsed="0.013412">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:29.977753" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:29.977597" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:29.977571" elapsed="0.000271"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:29.978223" 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-06-14T00:24:29.978338" 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-06-14T00:24:29.978034" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:29.978846" 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-06-14T00:24:29.978521" elapsed="0.000371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:29.979293" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:29.979042" elapsed="0.000295"/>
</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-06-14T00:24:29.979904" elapsed="0.000186"/>
</kw>
<msg time="2026-06-14T00:24:29.980188" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:29.980233" 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-06-14T00:24:29.979498" elapsed="0.000758"/>
</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-06-14T00:24:29.981110" elapsed="0.000314"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:29.982118" 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-06-14T00:24:29.981947" elapsed="0.000692">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-06-14T00:24:29.981590" elapsed="0.001128"/>
</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-06-14T00:24:29.983214" elapsed="0.000102"/>
</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-06-14T00:24:29.982884" elapsed="0.000478"/>
</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-06-14T00:24:29.980561" elapsed="0.002846"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:29.980331" elapsed="0.003125"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:29.980312" elapsed="0.003269"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:29.984368" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:29.984100" elapsed="0.000295"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:29.984445" elapsed="0.000033"/>
</return>
<msg time="2026-06-14T00:24:29.984611" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:29.983812" elapsed="0.000825"/>
</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-06-14T00:24:29.984808" elapsed="0.000436"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:29.985518" level="INFO">index=6
host=10.30.170.84
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-06-14T00:24:29.985618" level="INFO">${karaf_connection_object} = index=6
host=10.30.170.84
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_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:29.985413" elapsed="0.000231"/>
</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-06-14T00:24:29.985806" elapsed="0.002446"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:29.988697" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:29.990075" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:29.988413" elapsed="0.002042">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:29.993441" elapsed="0.000359"/>
</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-06-14T00:24:29.993960" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:29.994248" elapsed="0.000094"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:29.991270" elapsed="0.003122"/>
</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-06-14T00:24:29.990754" elapsed="0.003683"/>
</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-06-14T00:24:29.977179" elapsed="0.017339">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:31.013966" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:31.013826" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:31.013801" elapsed="0.000249"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:31.014401" 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-06-14T00:24:31.014515" 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-06-14T00:24:31.014226" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:31.015004" 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-06-14T00:24:31.014709" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:31.015438" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:31.015198" elapsed="0.000283"/>
</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-06-14T00:24:31.016075" elapsed="0.000184"/>
</kw>
<msg time="2026-06-14T00:24:31.016357" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:31.016403" 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-06-14T00:24:31.015641" elapsed="0.000784"/>
</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-06-14T00:24:31.017232" elapsed="0.000133"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:31.018029" 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-06-14T00:24:31.017863" elapsed="0.000663">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-06-14T00:24:31.017527" elapsed="0.001132"/>
</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-06-14T00:24:31.019164" 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-06-14T00:24:31.018842" elapsed="0.000471"/>
</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-06-14T00:24:31.016732" elapsed="0.002625"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:31.016500" elapsed="0.002906"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:31.016481" elapsed="0.002952"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:31.020219" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:31.019943" elapsed="0.000302"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:31.020294" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:31.020449" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:31.019634" elapsed="0.000839"/>
</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-06-14T00:24:31.020632" elapsed="0.000414"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:31.021314" level="INFO">index=8
host=10.30.170.84
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-06-14T00:24:31.021413" level="INFO">${karaf_connection_object} = index=8
host=10.30.170.84
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_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:31.021211" elapsed="0.000228"/>
</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-06-14T00:24:31.021583" elapsed="0.002375"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:31.024375" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:31.025387" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:31.024119" elapsed="0.001665">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:31.028758" elapsed="0.000344"/>
</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-06-14T00:24:31.029261" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:31.029551" elapsed="0.000096"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:31.026573" elapsed="0.003141"/>
</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-06-14T00:24:31.026063" elapsed="0.003698"/>
</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-06-14T00:24:31.013441" elapsed="0.016402">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.049893" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.049745" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.049718" elapsed="0.000267"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.050364" 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-06-14T00:24:32.050482" 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-06-14T00:24:32.050172" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.051011" 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-06-14T00:24:32.050697" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.051448" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:32.051208" elapsed="0.000284"/>
</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-06-14T00:24:32.052058" elapsed="0.000192"/>
</kw>
<msg time="2026-06-14T00:24:32.052452" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:32.052499" 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-06-14T00:24:32.051652" elapsed="0.000870"/>
</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-06-14T00:24:32.053338" elapsed="0.000136"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.054155" 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-06-14T00:24:32.053975" elapsed="0.000733">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-06-14T00:24:32.053635" elapsed="0.001137"/>
</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-06-14T00:24:32.055256" elapsed="0.000099"/>
</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-06-14T00:24:32.054937" elapsed="0.000463"/>
</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-06-14T00:24:32.052835" elapsed="0.002610"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:32.052598" elapsed="0.002895"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.052579" elapsed="0.002941"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:32.056285" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:32.056014" elapsed="0.000296"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:32.056358" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:32.056511" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:32.055744" elapsed="0.000792"/>
</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-06-14T00:24:32.056699" elapsed="0.000407"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.057384" level="INFO">index=10
host=10.30.170.84
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-06-14T00:24:32.057484" level="INFO">${karaf_connection_object} = index=10
host=10.30.170.84
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-06-14T00:24:32.057275" elapsed="0.000235"/>
</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-06-14T00:24:32.057654" elapsed="0.002426"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.060497" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:32.061595" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.060239" elapsed="0.001748">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.064974" elapsed="0.000352"/>
</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-06-14T00:24:32.065486" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:32.065790" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:32.062825" elapsed="0.003119"/>
</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-06-14T00:24:32.062262" elapsed="0.003727"/>
</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-06-14T00:24:32.049265" elapsed="0.016802">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<msg time="2026-06-14T00:24:32.066154" 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.84</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-06-14T00:24:28.931867" elapsed="3.134377">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.84</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-06-14T00:24:28.931464" elapsed="3.134880"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:28.931329" elapsed="3.135059"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-06-14T00:24:28.931172" elapsed="3.135253"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-06-14T00:24:28.529089" elapsed="3.537393"/>
</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-06-14T00:24:32.069112" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.069003" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.068984" elapsed="0.000197"/>
</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-06-14T00:24:32.073944" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.073838" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.073821" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.074965" 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-06-14T00:24:32.074568" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.075438" 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-06-14T00:24:32.075148" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-14T00:24:32.075507" elapsed="0.000028"/>
</return>
<msg time="2026-06-14T00:24:32.075659" 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-06-14T00:24:32.074231" elapsed="0.001466"/>
</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-06-14T00:24:32.081140" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.081032" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.081014" elapsed="0.000195"/>
</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-06-14T00:24:32.082372" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.082249" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.082231" elapsed="0.000210"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:32.082934" 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-06-14T00:24:32.082605" elapsed="0.000356"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.083329" 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-06-14T00:24:32.083115" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.084512" 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-06-14T00:24:32.084118" elapsed="0.001066">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:32.085317" level="INFO">${status_write} = FAIL</msg>
<msg time="2026-06-14T00:24:32.085362" 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-06-14T00:24:32.083625" elapsed="0.001760"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.086408" 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-06-14T00:24:32.086040" elapsed="0.001157">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:32.087333" level="INFO">${status_wait} = FAIL</msg>
<msg time="2026-06-14T00:24:32.087378" 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-06-14T00:24:32.085545" elapsed="0.001856"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.088344" level="FAIL">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.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-06-14T00:24:32.087729" elapsed="0.000693">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.robot"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:32.087476" elapsed="0.001070">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.robot"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:32.087457" elapsed="0.001124">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.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-06-14T00:24:32.088793" 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-06-14T00:24:32.089021" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:32.088882" elapsed="0.000278"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:24:32.088864" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="NOT RUN" start="2026-06-14T00:24:32.089220" elapsed="0.000015"/>
</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-06-14T00:24:32.091053" elapsed="0.000435"/>
</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-06-14T00:24:32.091846" elapsed="0.000265"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:32.092414" elapsed="0.000215"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:32.090304" elapsed="0.002423"/>
</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-06-14T00:24:32.089471" elapsed="0.003383"/>
</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-06-14T00:24:32.081968" elapsed="0.010970">Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.robot"</status>
</kw>
<msg time="2026-06-14T00:24:32.093037" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:32.093081" level="INFO">${message} = Failed to send the command: log:log "ROBOT MESSAGE: Starting suite /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.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-06-14T00:24:32.081362" elapsed="0.011742"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:32.093284" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.093179" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.093160" elapsed="0.000192"/>
</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-06-14T00:24:32.094098" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.093994" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.093972" elapsed="0.000193"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.094622" 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-06-14T00:24:32.094743" 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-06-14T00:24:32.094319" elapsed="0.000451"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.095173" 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-06-14T00:24:32.094919" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.095609" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:32.095373" elapsed="0.000278"/>
</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-06-14T00:24:32.096228" elapsed="0.000267"/>
</kw>
<msg time="2026-06-14T00:24:32.096592" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:32.096638" 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-06-14T00:24:32.095876" elapsed="0.000784"/>
</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-06-14T00:24:32.097731" elapsed="0.000245"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.099198" 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-06-14T00:24:32.098955" elapsed="0.000674">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-06-14T00:24:32.098195" elapsed="0.001606"/>
</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-06-14T00:24:32.100723" elapsed="0.000185"/>
</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-06-14T00:24:32.100032" elapsed="0.000945"/>
</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-06-14T00:24:32.096967" elapsed="0.004088"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:32.096752" elapsed="0.004353"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.096733" elapsed="0.004427"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:32.102071" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:32.101632" elapsed="0.000465"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:32.102145" elapsed="0.000030"/>
</return>
<msg time="2026-06-14T00:24:32.102296" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:32.101365" elapsed="0.000955"/>
</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-06-14T00:24:32.102470" elapsed="0.000423"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.103166" level="INFO">index=13
host=10.30.170.84
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-06-14T00:24:32.103265" level="INFO">${karaf_connection_object} = index=13
host=10.30.170.84
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-06-14T00:24:32.103063" elapsed="0.000230"/>
</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-06-14T00:24:32.103439" elapsed="0.002225"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.106088" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:32.106933" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.105837" elapsed="0.001460">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.110576" elapsed="0.000616"/>
</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-06-14T00:24:32.111428" elapsed="0.000437"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:32.112069" elapsed="0.000167"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:32.108118" elapsed="0.004196"/>
</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-06-14T00:24:32.107561" elapsed="0.004798"/>
</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-06-14T00:24:32.093753" elapsed="0.018686">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.112778" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:32.112851" 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-06-14T00:24:32.080745" elapsed="0.032206">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<msg time="2026-06-14T00:24:32.113052" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:32.113094" level="INFO">${output} = NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:32.076068" elapsed="0.037048"/>
</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-06-14T00:24:32.113439" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:32.113191" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.113172" elapsed="0.000345"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:32.075928" elapsed="0.037612"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-06-14T00:24:32.075751" elapsed="0.037817"/>
</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-06-14T00:24:32.073542" elapsed="0.040076"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-06-14T00:24:32.067120" elapsed="0.046551"/>
</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-06-14T00:24:32.066666" elapsed="0.047062"/>
</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-06-14T00:24:28.523060" elapsed="3.590717"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.114595" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-06-14T00:24:32.114298" elapsed="0.000323"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:32.118526" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-06-14T00:24:32.114798" elapsed="0.003773"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-14T00:24:32.122840" level="INFO">Creating Session using : alias=default, url=http://10.30.170.84:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x70f769273350&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-06-14T00:24:32.122444" elapsed="0.000543"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-06-14T00:24:32.122044" elapsed="0.001010"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:32.118642" elapsed="0.004442"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.118624" elapsed="0.004486"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.128193" level="INFO">${odl_connection} = 15</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-06-14T00:24:32.127801" elapsed="0.000418"/>
</kw>
<kw name="Flexible_Controller_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-06-14T00:24:32.129815" level="INFO">Length is 0.</msg>
<msg time="2026-06-14T00:24:32.129891" 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-06-14T00:24:32.129538" elapsed="0.000377"/>
</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-06-14T00:24:32.130067" elapsed="0.000310"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.131226" level="INFO">Logging into '10.30.170.84:22' as 'jenkins'.</msg>
<msg time="2026-06-14T00:24:32.470282" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-173-generic x86_64)

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

 System information as of Sun Jun 14 00:24:21 UTC 2026

  System load:  0.0                Processes:             153
  Usage of /:   5.1% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.84
  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.


Last login: Sun Jun 14 00:24:28 2026 from 10.30.171.181
[?2004h[jenkins@releng-59795-45-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-06-14T00:24:32.130918" elapsed="0.339517"/>
</kw>
<msg time="2026-06-14T00:24:32.470516" 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-06-14T00:24:32.130552" elapsed="0.340039"/>
</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-06-14T00:24:32.129114" elapsed="0.341593"/>
</kw>
<msg time="2026-06-14T00:24:32.470760" 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-06-14T00:24:32.128737" elapsed="0.342072"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-06-14T00:24:32.128393" elapsed="0.342488"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-06-14T00:24:32.470927" elapsed="0.000041"/>
</return>
<msg time="2026-06-14T00:24:32.471112" level="INFO">${odl} = 15</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-06-14T00:24:32.127498" elapsed="0.343639"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.481309" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-06-14T00:24:32.490380" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-06-14T00:24:32.471334" elapsed="0.019130"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:24:32.490707" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-06-14T00:24:32.491339" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:32.491155" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:32.491125" elapsed="0.000302"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.498230" level="INFO">${tools_connection} = 16</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-06-14T00:24:32.497666" elapsed="0.000602"/>
</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-06-14T00:24:32.500024" level="INFO">Length is 0.</msg>
<msg time="2026-06-14T00:24:32.500101" 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-06-14T00:24:32.499750" elapsed="0.000375"/>
</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-06-14T00:24:32.500281" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-06-14T00:24:32.501453" level="INFO">Logging into '10.30.170.140:22' as 'jenkins'.</msg>
<msg time="2026-06-14T00:24:33.236152" 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 Jun 14 00:24:32 UTC 2026

  System load:  0.14               Processes:             159
  Usage of /:   4.9% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.140
  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-59795-45-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-06-14T00:24:32.501136" elapsed="0.735162"/>
</kw>
<msg time="2026-06-14T00:24:33.236374" 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-06-14T00:24:32.500786" elapsed="0.735658"/>
</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-06-14T00:24:32.499294" elapsed="0.737254"/>
</kw>
<msg time="2026-06-14T00:24:33.236604" 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-06-14T00:24:32.498869" elapsed="0.737781"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-06-14T00:24:32.498520" elapsed="0.738218"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-06-14T00:24:33.236787" elapsed="0.000037"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-06-14T00:24:32.497178" elapsed="0.739771"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-06-14T00:24:32.123357" elapsed="1.113643"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-06-14T00:24:32.114050" elapsed="1.122999"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.248366" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-06-14T00:24:33.259943" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../../tools/netconf_tools/getter.py' -&gt; '/home/jenkins//getter.py'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../../tools/netconf_tools/getter.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-06-14T00:24:33.237276" elapsed="0.022756"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.267377" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../libraries/AuthStandalone.py' -&gt; '/home/jenkins//AuthStandalone.py'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../libraries/AuthStandalone.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-06-14T00:24:33.260275" elapsed="0.007188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.268395" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${USE_NETCONF_CONNECTOR}==${True}</arg>
<arg>default</arg>
<arg>${device_type}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:24:33.267743" elapsed="0.000690"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.269139" level="INFO">${device_type} = full-uri-device</msg>
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-06-14T00:24:33.268668" elapsed="0.000544"/>
</kw>
<doc>Setup everything needed for the test cases.</doc>
<status status="PASS" start="2026-06-14T00:24:28.521401" elapsed="4.747892"/>
</kw>
<test id="s1-s2-t1" name="Find Max Netconf Devices" line="45">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-06-14T00:24:33.286959" elapsed="0.000216"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-06-14T00:24:33.286670" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-06-14T00:24:33.288293" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:33.288154" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.288130" elapsed="0.000236"/>
</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-06-14T00:24:33.293326" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:33.293213" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.293194" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.294390" 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-06-14T00:24:33.294003" elapsed="0.000475"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.294955" 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-06-14T00:24:33.294643" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-14T00:24:33.295028" elapsed="0.000032"/>
</return>
<msg time="2026-06-14T00:24:33.295187" 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-06-14T00:24:33.293615" elapsed="0.001597"/>
</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-06-14T00:24:33.300733" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:33.300611" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.300592" elapsed="0.000211"/>
</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-06-14T00:24:33.301972" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:33.301867" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.301849" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:33.302474" level="INFO">${karaf_connection_index} = 13</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-06-14T00:24:33.302184" elapsed="0.000316"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.302898" level="INFO">${current_connection_index} = 16</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-06-14T00:24:33.302667" elapsed="0.000257"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.303667" 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-06-14T00:24:33.303415" elapsed="0.000904">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:33.304496" level="INFO">${status_write} = FAIL</msg>
<msg time="2026-06-14T00:24:33.304542" 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-06-14T00:24:33.303083" elapsed="0.001483"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.305330" 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-06-14T00:24:33.305082" elapsed="0.000892">Cannot open session, you need to establish a connection first.</status>
</kw>
<msg time="2026-06-14T00:24:33.306148" level="INFO">${status_wait} = FAIL</msg>
<msg time="2026-06-14T00:24:33.306193" 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-06-14T00:24:33.304749" elapsed="0.001468"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.307103" level="FAIL">Failed to send the command: log:log "ROBOT MESSAGE: Starting test netconf-scale-max-devices.txt.Max Devices.Find Max Netconf Devices"</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-06-14T00:24:33.306506" elapsed="0.000659">Failed to send the command: log:log "ROBOT MESSAGE: Starting test netconf-scale-max-devices.txt.Max Devices.Find Max Netconf Devices"</status>
</kw>
<status status="FAIL" start="2026-06-14T00:24:33.306292" elapsed="0.000941">Failed to send the command: log:log "ROBOT MESSAGE: Starting test netconf-scale-max-devices.txt.Max Devices.Find Max Netconf Devices"</status>
</branch>
<status status="FAIL" start="2026-06-14T00:24:33.306272" elapsed="0.000994">Failed to send the command: log:log "ROBOT MESSAGE: Starting test netconf-scale-max-devices.txt.Max Devices.Find Max Netconf Devices"</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-06-14T00:24:33.307423" elapsed="0.000022"/>
</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-06-14T00:24:33.307646" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:33.307508" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:24:33.307491" elapsed="0.000250"/>
</if>
<return>
<value>${message_wait}</value>
<status status="NOT RUN" start="2026-06-14T00:24:33.307774" elapsed="0.000015"/>
</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">
<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-06-14T00:24:33.310123" elapsed="0.000138"/>
</kw>
<msg time="2026-06-14T00:24:33.310322" 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-06-14T00:24:33.309167" elapsed="0.001274"/>
</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-06-14T00:24:33.310722" elapsed="0.000072"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-06-14T00:24:33.311036" elapsed="0.000068"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:33.308560" elapsed="0.002686"/>
</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-06-14T00:24:33.308038" elapsed="0.003272"/>
</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-06-14T00:24:33.301543" elapsed="0.009855">Failed to send the command: log:log "ROBOT MESSAGE: Starting test netconf-scale-max-devices.txt.Max Devices.Find Max Netconf Devices"</status>
</kw>
<msg time="2026-06-14T00:24:33.311500" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:33.311543" level="INFO">${message} = Failed to send the command: log:log "ROBOT MESSAGE: Starting test netconf-scale-max-devices.txt.Max Devices.Find Max Netconf Devices"</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-06-14T00:24:33.300950" elapsed="0.010617"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:33.311768" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:33.311643" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.311624" elapsed="0.000212"/>
</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-06-14T00:24:33.313975" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:24:33.313869" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.313850" elapsed="0.000195"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.314308" level="INFO">index=16
host=10.30.170.140
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-06-14T00:24:33.314410" level="INFO">${current_ssh_connection_object} = index=16
host=10.30.170.140
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_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:24:33.314193" elapsed="0.000244"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.314892" level="INFO">{1: 13}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:33.314585" elapsed="0.000352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.315328" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:24:33.315088" elapsed="0.000283"/>
</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-06-14T00:24:33.315902" elapsed="0.000250"/>
</kw>
<msg time="2026-06-14T00:24:33.316250" level="INFO">${status} = PASS</msg>
<msg time="2026-06-14T00:24:33.316296" level="INFO">${old_connection_index} = 13</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-06-14T00:24:33.315526" elapsed="0.000793"/>
</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-06-14T00:24:33.317125" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.318332" 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-06-14T00:24:33.317962" elapsed="0.001243">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-06-14T00:24:33.317489" elapsed="0.001809"/>
</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-06-14T00:24:33.319928" elapsed="0.000264"/>
</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-06-14T00:24:33.319465" elapsed="0.000807"/>
</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-06-14T00:24:33.316609" elapsed="0.003708"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:33.316395" elapsed="0.003972"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.316376" elapsed="0.004017"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-06-14T00:24:33.321237" level="INFO">${ip_address} = 10.30.170.84</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-06-14T00:24:33.320923" elapsed="0.000341"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-06-14T00:24:33.321312" elapsed="0.000029"/>
</return>
<msg time="2026-06-14T00:24:33.321461" level="INFO">${odl_ip} = 10.30.170.84</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-06-14T00:24:33.320592" elapsed="0.000893"/>
</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-06-14T00:24:33.321635" elapsed="0.000421"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.322326" level="INFO">index=17
host=10.30.170.84
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-06-14T00:24:33.322424" level="INFO">${karaf_connection_object} = index=17
host=10.30.170.84
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-06-14T00:24:33.322222" elapsed="0.000260"/>
</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-06-14T00:24:33.322629" elapsed="0.002239"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-06-14T00:24:33.325317" level="INFO">Logging into '10.30.170.84:8101' as 'karaf'.</msg>
<msg time="2026-06-14T00:24:33.326501" level="FAIL">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:33.325028" elapsed="0.001861">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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">
<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-06-14T00:24:33.339371" elapsed="0.000374"/>
</kw>
<msg time="2026-06-14T00:24:33.339828" 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-06-14T00:24:33.338205" elapsed="0.001762"/>
</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-06-14T00:24:33.340126" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-06-14T00:24:33.340287" elapsed="0.000021"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:24:33.327666" elapsed="0.012704"/>
</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-06-14T00:24:33.327160" elapsed="0.013257"/>
</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-06-14T00:24:33.313560" elapsed="0.026935">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:33.340889" elapsed="0.000034"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-06-14T00:24:33.340984" elapsed="0.000021"/>
</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-06-14T00:24:33.300270" elapsed="0.040863">NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</status>
</kw>
<msg time="2026-06-14T00:24:33.341263" level="INFO">${status} = FAIL</msg>
<msg time="2026-06-14T00:24:33.341319" level="INFO">${output} = NoValidConnectionsError: [Errno None] Unable to connect to port 8101 on 10.30.170.84</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-06-14T00:24:33.295583" elapsed="0.045767"/>
</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-06-14T00:24:33.341679" elapsed="0.000182"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:24:33.341429" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.341410" elapsed="0.000509"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-14T00:24:33.295443" elapsed="0.046499"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-06-14T00:24:33.295266" elapsed="0.046706"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-06-14T00:24:33.292839" elapsed="0.049188"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-06-14T00:24:33.287847" elapsed="0.054234"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-06-14T00:24:33.287381" elapsed="0.054742"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-06-14T00:24:33.284539" elapsed="0.057636"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.342605" level="INFO">${error_message} = Failure initializing suite</msg>
<var>${error_message}</var>
<arg>Failure initializing suite</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:24:33.342336" elapsed="0.000294"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.344599" level="INFO">${maximum_devices} = 0</msg>
<var>${maximum_devices}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:24:33.342797" elapsed="0.001829"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.345049" level="INFO">${discover_time} = 0</msg>
<var>${discover_time}</var>
<arg>0</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:24:33.344795" elapsed="0.000280"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.346040" level="INFO">${start} = 1000</msg>
<var>${start}</var>
<arg>${INIT_DEVICE_COUNT}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-06-14T00:24:33.345541" elapsed="0.000525"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.346519" level="INFO">${stop} = 3000</msg>
<var>${stop}</var>
<arg>${MAX_DEVICE_COUNT}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-06-14T00:24:33.346219" elapsed="0.000326"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-06-14T00:24:33.347057" level="INFO">${increment} = 500</msg>
<var>${increment}</var>
<arg>${DEVICE_INCREMENT}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-06-14T00:24:33.346751" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="&quot;${SCHEMA_MODEL}&quot; == &quot;juniper&quot;">
<kw name="Get Juniper Device Schemas">
<kw name="Run" owner="OperatingSystem">
<msg time="2026-06-14T00:24:33.348987" level="INFO">Running command 'git clone https://github.com/Juniper/yang.git 2&gt;&amp;1'.</msg>
<arg>git clone https://github.com/Juniper/yang.git</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-06-14T00:24:33.347662" elapsed="59.503481"/>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-06-14T00:25:32.852146" level="INFO">Running command 'mkdir /tmp/junos_19.4R1 2&gt;&amp;1'.</msg>
<arg>mkdir /tmp/junos_19.4R1</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-06-14T00:25:32.851440" elapsed="0.003721"/>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-06-14T00:25:32.855786" level="INFO">Running command 'find yang/19.4/19.4R1/junos -type f -name '*yang' -exec cp {} /tmp/junos_19.4R1/ \; 2&gt;&amp;1'.</msg>
<arg>find yang/19.4/19.4R1/junos -type f -name '*yang' -exec cp {} /tmp/junos_19.4R1/ \\;</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-06-14T00:25:32.855330" elapsed="0.800423"/>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-06-14T00:25:33.657615" level="INFO">Running command 'cp yang/19.4/19.4R1/common/* /tmp/junos_19.4R1/ 2&gt;&amp;1'.</msg>
<arg>cp yang/19.4/19.4R1/common/* /tmp/junos_19.4R1/</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-06-14T00:25:33.656311" elapsed="0.004676"/>
</kw>
<kw name="List Directory" owner="OperatingSystem">
<msg time="2026-06-14T00:25:33.661416" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/junos_19.4R1"&gt;/tmp/junos_19.4R1&lt;/a&gt;'.</msg>
<msg time="2026-06-14T00:25:33.661855" level="INFO">183 items:
junos-common-ddl-extensions@2019-01-01.yang
junos-common-odl-extensions@2019-01-01.yang
junos-common-types@2019-01-01.yang
junos-conf-access-profile@2019-01-01.yang
junos-conf-access@2019-01-01.yang
junos-conf-accounting-options@2019-01-01.yang
junos-conf-applications@2019-01-01.yang
junos-conf-bridge-domains@2019-01-01.yang
junos-conf-chassis@2019-01-01.yang
junos-conf-class-of-service@2019-01-01.yang
junos-conf-diameter@2019-01-01.yang
junos-conf-dynamic-profiles@2019-01-01.yang
junos-conf-event-options@2019-01-01.yang
junos-conf-fabric@2019-01-01.yang
junos-conf-firewall@2019-01-01.yang
junos-conf-forwarding-options@2019-01-01.yang
junos-conf-interfaces@2019-01-01.yang
junos-conf-logical-systems@2019-01-01.yang
junos-conf-multi-chassis@2019-01-01.yang
junos-conf-multicast-snooping-options@2019-01-01.yang
junos-conf-poe@2019-01-01.yang
junos-conf-policy-options@2019-01-01.yang
junos-conf-protocols@2019-01-01.yang
junos-conf-root@2019-01-01.yang
junos-conf-routing-instances@2019-01-01.yang
junos-conf-routing-options@2019-01-01.yang
junos-conf-security@2019-01-01.yang
junos-conf-services@2019-01-01.yang
junos-conf-snmp@2019-01-01.yang
junos-conf-switch-options@2019-01-01.yang
junos-conf-system@2019-01-01.yang
junos-conf-unified-edge@2019-01-01.yang
junos-conf-virtual-chassis@2019-01-01.yang
junos-conf-vlans@2019-01-01.yang
junos-conf-vmhost@2019-01-01.yang
junos-rpc-access-cac@2019-01-01.yang
junos-rpc-access-security@2019-01-01.yang
junos-rpc-accounting@2019-01-01.yang
junos-rpc-agent@2019-01-01.yang
junos-rpc-amt@2019-01-01.yang
junos-rpc-analytics@2019-01-01.yang
junos-rpc-ancp@2019-01-01.yang
junos-rpc-app-engine@2019-01-01.yang
junos-rpc-aps@2019-01-01.yang
junos-rpc-arp@2019-01-01.yang
junos-rpc-as-path@2019-01-01.yang
junos-rpc-authentication-whitelist@2019-01-01.yang
junos-rpc-auto-bandwidth@2019-01-01.yang
junos-rpc-auto-configuration@2019-01-01.yang
junos-rpc-backup-selection@2019-01-01.yang
junos-rpc-bfd@2019-01-01.yang
junos-rpc-bgp@2019-01-01.yang
junos-rpc-bridge@2019-01-01.yang
junos-rpc-captive-portal@2019-01-01.yang
junos-rpc-chassis@2019-01-01.yang
junos-rpc-class-of-service@2019-01-01.yang
junos-rpc-clear@2019-01-01.yang
junos-rpc-cli@2019-01-01.yang
junos-rpc-connections@2019-01-01.yang
junos-rpc-database-replication@2019-01-01.yang
junos-rpc-ddos-protection@2019-01-01.yang
junos-rpc-dhcp-security@2019-01-01.yang
junos-rpc-dhcp@2019-01-01.yang
junos-rpc-dhcpv6@2019-01-01.yang
junos-rpc-diameter@2019-01-01.yang
junos-rpc-dot1x@2019-01-01.yang
junos-rpc-dvmrp@2019-01-01.yang
junos-rpc-dynamic-profile@2019-01-01.yang
junos-rpc-dynamic-tunnels@2019-01-01.yang
junos-rpc-ephemeral-configuration@2019-01-01.yang
junos-rpc-esis@2019-01-01.yang
junos-rpc-ethernet-switching@2019-01-01.yang
junos-rpc-event-options@2019-01-01.yang
junos-rpc-event-viewer@2019-01-01.yang
junos-rpc-evpn@2019-01-01.yang
junos-rpc-extensible-subscriber-services@2019-01-01.yang
junos-rpc-extension-provider@2019-01-01.yang
junos-rpc-extension-service@2019-01-01.yang
junos-rpc-file-mgd@2019-01-01.yang
junos-rpc-file@2019-01-01.yang
junos-rpc-firewall@2019-01-01.yang
junos-rpc-flexible-tunnels@2019-01-01.yang
junos-rpc-flight-recorder@2019-01-01.yang
junos-rpc-forwarding-options@2019-01-01.yang
junos-rpc-help@2019-01-01.yang
junos-rpc-helper@2019-01-01.yang
junos-rpc-hfrr@2019-01-01.yang
junos-rpc-host@2019-01-01.yang
junos-rpc-iccp@2019-01-01.yang
junos-rpc-igmp@2019-01-01.yang
junos-rpc-ilmi@2019-01-01.yang
junos-rpc-ingress-replication@2019-01-01.yang
junos-rpc-interfaces@2019-01-01.yang
junos-rpc-ipv6@2019-01-01.yang
junos-rpc-isis@2019-01-01.yang
junos-rpc-jdaf@2019-01-01.yang
junos-rpc-l2-learning@2019-01-01.yang
junos-rpc-l2circuit@2019-01-01.yang
junos-rpc-l2cpd@2019-01-01.yang
junos-rpc-l2vpn@2019-01-01.yang
junos-rpc-lacp@2019-01-01.yang
junos-rpc-ldp@2019-01-01.yang
junos-rpc-link-management@2019-01-01.yang
junos-rpc-lldp@2019-01-01.yang
junos-rpc-load@2019-01-01.yang
junos-rpc-log@2019-01-01.yang
junos-rpc-loop-detect@2019-01-01.yang
junos-rpc-mac-refresh@2019-01-01.yang
junos-rpc-mac-rewrite@2019-01-01.yang
junos-rpc-mld@2019-01-01.yang
junos-rpc-monitor@2019-01-01.yang
junos-rpc-mpls@2019-01-01.yang
junos-rpc-msdp@2019-01-01.yang
junos-rpc-mtrace@2019-01-01.yang
junos-rpc-multi-chassis@2019-01-01.yang
junos-rpc-multicast@2019-01-01.yang
junos-rpc-mvpn@2019-01-01.yang
junos-rpc-mvrp@2019-01-01.yang
junos-rpc-network-access@2019-01-01.yang
junos-rpc-network-agent@2019-01-01.yang
junos-rpc-nonstop-routing@2019-01-01.yang
junos-rpc-ntp@2019-01-01.yang
junos-rpc-oam@2019-01-01.yang
junos-rpc-op@2019-01-01.yang
junos-rpc-ospf3@2019-01-01.yang
junos-rpc-ospf@2019-01-01.yang
junos-rpc-ovsdb@2019-01-01.yang
junos-rpc-passive-monitoring@2019-01-01.yang
junos-rpc-path-computation-client@2019-01-01.yang
junos-rpc-performance-monitoring@2019-01-01.yang
junos-rpc-pfe@2019-01-01.yang
junos-rpc-pgm@2019-01-01.yang
junos-rpc-pim@2019-01-01.yang
junos-rpc-ping@2019-01-01.yang
junos-rpc-poe@2019-01-01.yang
junos-rpc-policer@2019-01-01.yang
junos-rpc-ppp@2019-01-01.yang
junos-rpc-pppoe@2019-01-01.yang
junos-rpc-programmable-rpd@2019-01-01.yang
junos-rpc-protection-group@2019-01-01.yang
junos-rpc-ptp@2019-01-01.yang
junos-rpc-quit@2019-01-01.yang
junos-rpc-r2cp@2019-01-01.yang
junos-rpc-redundant-trunk-group@2019-01-01.yang
junos-rpc-remote-device-management@2019-01-01.yang
junos-rpc-request@2019-01-01.yang
junos-rpc-restart@2019-01-01.yang
junos-rpc-rip@2019-01-01.yang
junos-rpc-ripng@2019-01-01.yang
junos-rpc-rollback-config@2019-01-01.yang
junos-rpc-route@2019-01-01.yang
junos-rpc-rsvp@2019-01-01.yang
junos-rpc-sap@2019-01-01.yang
junos-rpc-save@2019-01-01.yang
junos-rpc-security@2019-01-01.yang
junos-rpc-services@2019-01-01.yang
junos-rpc-set@2019-01-01.yang
junos-rpc-sflow@2019-01-01.yang
junos-rpc-shmlog@2019-01-01.yang
junos-rpc-snmp@2019-01-01.yang
junos-rpc-spanning-tree@2019-01-01.yang
junos-rpc-spring-traffic-engineering@2019-01-01.yang
junos-rpc-ssl-certificates@2019-01-01.yang
junos-rpc-static-subscribers@2019-01-01.yang
junos-rpc-subscribers@2019-01-01.yang
junos-rpc-synchronous-ethernet@2019-01-01.yang
junos-rpc-syslog-filenames@2019-01-01.yang
junos-rpc-system@2019-01-01.yang
junos-rpc-task@2019-01-01.yang
junos-rpc-tcp-forwarding@2019-01-01.yang
junos-rpc-ted@2019-01-01.yang
junos-rpc-test@2019-01-01.yang
junos-rpc-trace@2019-01-01.yang
junos-rpc-traceroute@2019-01-01.yang
junos-rpc-unified-edge@2019-01-01.yang
junos-rpc-v4ov6-tunnels@2019-01-01.yang
junos-rpc-validation@2019-01-01.yang
junos-rpc-version@2019-01-01.yang
junos-rpc-virtual-chassis@2019-01-01.yang
junos-rpc-vlans@2019-01-01.yang
junos-rpc-vmhost@2019-01-01.yang
junos-rpc-vpls@2019-01-01.yang
junos-rpc-vrrp@2019-01-01.yang</msg>
<arg>/tmp/junos_19.4R1/</arg>
<doc>Returns and logs items in a directory, optionally filtered with ``pattern``.</doc>
<status status="PASS" start="2026-06-14T00:25:33.661231" elapsed="0.001244"/>
</kw>
<return>
<value>/tmp/junos_19.4R1</value>
<status status="PASS" start="2026-06-14T00:25:33.662550" elapsed="0.000069"/>
</return>
<msg time="2026-06-14T00:25:33.662892" level="INFO">${schema_dir} = /tmp/junos_19.4R1</msg>
<var>${schema_dir}</var>
<status status="PASS" start="2026-06-14T00:24:33.347401" elapsed="60.315529"/>
</kw>
<status status="PASS" start="2026-06-14T00:24:33.347152" elapsed="60.315825"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${schema_dir}</var>
<arg>none</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:33.663297" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:25:33.663017" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-06-14T00:24:33.347134" elapsed="60.316276"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.664287" level="INFO">${INSTALL_TESTTOOL} = True</msg>
<var>${INSTALL_TESTTOOL}</var>
<arg>'${IS_KARAF_APPL}' == 'False'</arg>
<arg>False</arg>
<arg>True</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.663668" elapsed="0.000657"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.667794" level="INFO">${TESTTOOL_EXECUTABLE} = </msg>
<var>${TESTTOOL_EXECUTABLE}</var>
<arg>'${IS_KARAF_APPL}' == 'False'</arg>
<arg>${NETCONF_FILENAME}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.664587" elapsed="0.003246"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.668618" level="INFO">${SCHEMAS} = /tmp/junos_19.4R1</msg>
<var>${SCHEMAS}</var>
<arg>'${IS_KARAF_APPL}' == 'False'</arg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../variables/netconf/CRUD/schemas</arg>
<arg>${schema_dir}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.668095" elapsed="0.000561"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.669363" level="INFO">${restconf_url} = http://10.30.170.84:8181/rests</msg>
<var>${restconf_url}</var>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}/rests</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:25:33.668906" elapsed="0.000494"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.669993" level="INFO">${device_names} = []</msg>
<var>${device_names}</var>
<arg>[]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:25:33.669616" elapsed="0.000415"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.673572" level="INFO">${timeout} = 3000</msg>
<var>${timeout}</var>
<arg>${devices}*${TIMEOUT_FACTOR}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-06-14T00:25:33.673199" elapsed="0.000400"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.674192" level="INFO">${timeout} = 3000</msg>
<var>${timeout}</var>
<arg>${timeout} &gt; ${MIN_CONNECT_TIMEOUT}</arg>
<arg>${timeout}</arg>
<arg>${MIN_CONNECT_TIMEOUT}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.673798" elapsed="0.000421"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Starting Iteration with ${devices} devices</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-06-14T00:25:33.674395" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="&quot;${INSTALL_TESTTOOL}&quot;==&quot;True&quot;">
<kw name="Install_And_Start_Testtool" owner="NetconfKeywords">
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.695458" level="INFO">${name_prefix} = netconf-testtool-</msg>
<var>${name_prefix}</var>
<arg>${artifact}-</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-14T00:25:33.695158" elapsed="0.000327"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.695993" level="INFO">${extension} = jar</msg>
<var>${extension}</var>
<arg>'${component}'=='odl-micro'</arg>
<arg>tar</arg>
<arg>jar</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.695645" elapsed="0.000375"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.696591" level="INFO">${name_suffix} = -executable.jar</msg>
<var>${name_suffix}</var>
<arg>"${suffix}" != ""</arg>
<arg>-${suffix}.${extension}</arg>
<arg>.${extension}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.696200" elapsed="0.000417"/>
</kw>
<kw name="Deploy_Artifact" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_url}""" != ""</arg>
<arg>Deploy_From_Url</arg>
<arg>${explicit_url}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.697915" elapsed="0.000308"/>
</kw>
<kw name="Fetch From Left" owner="String">
<msg time="2026-06-14T00:25:33.698596" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${BUNDLE_URL}</arg>
<arg>/org/opendaylight</arg>
<doc>Returns contents of the ``string`` before the first occurrence of ``marker``.</doc>
<status status="PASS" start="2026-06-14T00:25:33.698381" elapsed="0.000241"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-14T00:25:33.699183" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>'${urlbase}' != '${BUNDLE_URL}'</arg>
<arg>${urlbase}</arg>
<arg>${fallback_url}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-14T00:25:33.698798" elapsed="0.000412"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Magnesium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.718352" elapsed="0.000449"/>
</kw>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'carpeople'] {} and return its value.</doc>
<status status="PASS" start="2026-06-14T00:25:33.717900" elapsed="0.000974"/>
</kw>
<msg time="2026-06-14T00:25:33.718921" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.709313" elapsed="0.009663"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>carpeople</arg>
<doc>Compare magnesium to vanadium and in case vanadium is at most magnesium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-06-14T00:25:33.708916" elapsed="0.010137"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Aluminium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.737562" elapsed="0.000416"/>
</kw>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'netconf'] {} and return its value.</doc>
<status status="PASS" start="2026-06-14T00:25:33.737111" elapsed="0.000935"/>
</kw>
<msg time="2026-06-14T00:25:33.738092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.728532" elapsed="0.009608"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<doc>Compare aluminium to vanadium and in case vanadium is at most aluminium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-06-14T00:25:33.728145" elapsed="0.010071"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Silicon" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.756682" elapsed="0.000414"/>
</kw>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'bgpcep'] {} and return its value.</doc>
<status status="PASS" start="2026-06-14T00:25:33.756229" elapsed="0.000935"/>
</kw>
<msg time="2026-06-14T00:25:33.757210" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.747615" elapsed="0.009647"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>bgpcep</arg>
<doc>Compare silicon to vanadium and in case vanadium is at most silicon,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-06-14T00:25:33.747231" elapsed="0.010107"/>
</kw>
<if>
<branch type="IF" condition="'${build_version}'=='${EMPTY}'">
<kw name="NexusKeywords__Detect_Version_To_Pull" owner="NexusKeywords">
<kw name="NexusKeywords__Get_Items_To_Look_At" owner="NexusKeywords">
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<arg>Component not supported by NexusKeywords version detection: ${component}</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="PASS" start="2026-06-14T00:25:33.760295" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-06-14T00:25:33.761053" elapsed="0.000176"/>
</kw>
<msg time="2026-06-14T00:25:33.761274" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Collections.Get_From_Dictionary</arg>
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-14T00:25:33.760715" elapsed="0.000608"/>
</kw>
<msg time="2026-06-14T00:25:33.761422" level="INFO">${itemlist} = netconf-api</msg>
<var>${itemlist}</var>
<arg>${component}</arg>
<doc>Get a list of items that might contain the version number that we are looking for.</doc>
<status status="PASS" start="2026-06-14T00:25:33.759984" elapsed="0.001462"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:25:33.761738" level="INFO">index=16
host=10.30.170.140
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-06-14T00:25:33.761839" level="INFO">${current_ssh_connection} = index=16
host=10.30.170.140
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_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-06-14T00:25:33.761599" elapsed="0.000266"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-06-14T00:25:33.766956" level="INFO">${odl_connection} = 18</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-06-14T00:25:33.766555" elapsed="0.000428"/>
</kw>
<kw name="Flexible_Controller_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-06-14T00:25:33.769276" level="INFO">Length is 0.</msg>
<msg time="2026-06-14T00:25:33.769408" 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-06-14T00:25:33.768502" elapsed="0.000961"/>
</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-06-14T00:25:33.769762" elapsed="0.000670"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-06-14T00:25:33.772650" level="INFO">Logging into '10.30.170.84:22' as 'jenkins'.</msg>
<msg time="2026-06-14T00:25:34.502293" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-173-generic x86_64)

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

 System information as of Sun Jun 14 00:25:34 UTC 2026

  System load:  0.09               Processes:             152
  Usage of /:   5.1% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.84
  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.


Last login: Sun Jun 14 00:24:32 2026 from 10.30.171.181
[?2004h[jenkins@releng-59795-45-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-06-14T00:25:33.772206" elapsed="0.730324"/>
</kw>
<msg time="2026-06-14T00:25:34.502610" 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-06-14T00:25:33.770847" elapsed="0.731867"/>
</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-06-14T00:25:33.767926" elapsed="0.735130"/>
</kw>
<msg time="2026-06-14T00:25:34.503110" 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-06-14T00:25:33.767531" elapsed="0.735628"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-06-14T00:25:33.767159" elapsed="0.736071"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-06-14T00:25:34.503275" elapsed="0.000035"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-06-14T00:25:33.766184" elapsed="0.737235"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-06-14T00:25:34.503888" level="INFO">Executing command 'sh search.sh /tmp/karaf-0.23.2-SNAPSHOT/system netconf-api'.</msg>
<msg time="2026-06-14T00:25:34.516737" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-06-14T00:25:34.516850" level="INFO">${version} = Path '/tmp/karaf-0.23.2-SNAPSHOT/system' does not exist or is not a directory</msg>
<msg time="2026-06-14T00:25:34.516895" level="INFO">${result} = 1</msg>
<var>${version}</var>
<var>${result}</var>
<arg>sh search.sh ${WORKSPACE}/${BUNDLEFOLDER}/system ${itemlist}</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-06-14T00:25:34.503608" elapsed="0.013311"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-06-14T00:25:34.517092" elapsed="0.000282"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-06-14T00:25:34.524623" elapsed="0.000343"/>
</kw>
<msg time="2026-06-14T00:25:34.525061" 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-06-14T00:25:34.523507" elapsed="0.001667"/>
</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-06-14T00:25:34.525522" elapsed="0.000049"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.525909" elapsed="0.000047"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-06-14T00:25:34.517961" elapsed="0.008131"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-14T00:25:34.527010" level="INFO">Path '/tmp/karaf-0.23.2-SNAPSHOT/system' does not exist or is not a directory</msg>
<arg>${version}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-14T00:25:34.526417" elapsed="0.000694"/>
</kw>
<if>
<branch type="IF" condition="${result}!=0">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-06-14T00:25:34.528575" level="FAIL">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</msg>
<arg>Component "${component}": searching for "${itemlist}" found no version, cannot locate test tool.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.527775" elapsed="0.000981">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</kw>
<status status="FAIL" start="2026-06-14T00:25:34.527266" elapsed="0.001639">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</branch>
<status status="FAIL" start="2026-06-14T00:25:34.527221" elapsed="0.001759">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</if>
<kw name="Split String" owner="String">
<var>${version}</var>
<var>${location}</var>
<arg>${version}</arg>
<arg>max_split=1</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.529344" elapsed="0.000040"/>
</kw>
<return>
<value>${version}</value>
<value>${location}</value>
<status status="NOT RUN" start="2026-06-14T00:25:34.529437" elapsed="0.000016"/>
</return>
<var>${version}</var>
<var>${location}</var>
<arg>${component}</arg>
<doc>Determine the exact Nexus directory to be used as a source for a particular test tool
Figure out what version of the tool needs to be pulled out of the
Nexus by looking at the version directory of the subsystem from
which the tool is being pulled. This code is REALLY UGLY but there
is no way around it until the bug
https://bugs.opendaylight.org/show_bug.cgi?id=5206 gets fixed.
I also don't want to depend on maven-metadata-local.xml and other
bits and pieces of ODL distribution which are not required for ODL
to function properly.</doc>
<status status="FAIL" start="2026-06-14T00:25:33.759562" elapsed="0.769982">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</kw>
<status status="FAIL" start="2026-06-14T00:25:33.757409" elapsed="0.772203">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${version}</var>
<var>${location}</var>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.529802" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:25:34.529642" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-06-14T00:25:33.757390" elapsed="0.772498">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</if>
<if>
<branch type="IF" condition="'SNAPSHOT' in '${version}'">
<kw name="Remove Values From List" owner="Collections">
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<arg>bgpcep</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.530094" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:25:34.529955" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:25:34.529939" elapsed="0.000237"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<var>${is_staged}</var>
<arg>"opendaylight.release" not in '${urlbase}' and "opendaylight.snapshot" not in '${urlbase}'</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.530326" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${is_mri_component}</var>
<arg>'${component}' in ${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.530543" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${urlbase}</var>
<arg>${is_mri_component} == "TRUE" and ${is_staged} == "FALSE"</arg>
<arg>${NEXUS_RELEASE_BASE_URL}</arg>
<arg>${urlbase}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.530739" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${url}</var>
<arg>${urlbase}/${location}/${artifact}/${version}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.530910" elapsed="0.000020"/>
</kw>
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<var>${metadata}</var>
<arg>curl -L ${url}/maven-metadata.xml</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.531129" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${namepart}</var>
<arg>SSHKeywords.Execute_Command_Should_Pass</arg>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.531307" elapsed="0.000020"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${length}</var>
<arg>${namepart}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.531480" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${namepart}</var>
<arg>"${status}" != "PASS" or ${length} == 0</arg>
<arg>${version}</arg>
<arg>${namepart}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.531651" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${filename}</var>
<arg>${name_prefix}${namepart}${name_suffix}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.531835" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${filename}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.531998" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${url}</var>
<arg>${url}/${filename}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.532158" elapsed="0.000020"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.532338" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.532509" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${result} == 0">
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-06-14T00:25:34.532627" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-06-14T00:25:34.532590" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:25:34.532573" elapsed="0.000134"/>
</if>
<kw name="Replace String Using Regexp" owner="String">
<var>${release_url}</var>
<arg>${url}</arg>
<arg>autorelease-[0-9]{4}</arg>
<arg>opendaylight.release</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.532844" elapsed="0.000021"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${release_url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.533024" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${result} != 0">
<kw name="Fail" owner="BuiltIn">
<arg>Artifact "${artifact}" in component "${component}" could not be downloaded from ${release_url} nor ${url}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.533248" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:25:34.533113" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:25:34.533097" elapsed="0.000227"/>
</if>
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-06-14T00:25:34.533355" elapsed="0.000014"/>
</return>
<var>${filename}</var>
<arg>${component}</arg>
<arg>${artifact}</arg>
<arg>${name_prefix}</arg>
<arg>${name_suffix}</arg>
<arg>${fallback_url}</arg>
<arg>${explicit_url}</arg>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Deploy the specified artifact from Nexus to the cwd of the machine to which the active SSHLibrary connection points.
netconf is a name part of an artifact present in system/ of ODl installation with the same version as netconf-testtool should have.
Must have https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/karaf/0.23.2-SNAPSHOT/karaf-.zip variable set to the URL from which the
tested ODL distribution was downloaded and this place must be
inside a repository created by a standard distribution
construction job. If this is detected to ne be the case, fallback URL is used.
If  is non-empty, Deploy_From_Utrl is called instead.
TODO: Allow deploying to a specific directory, we have SSHKeywords.Execute_Command_At_Cwd_Should_Pass now.</doc>
<status status="FAIL" start="2026-06-14T00:25:33.697244" elapsed="0.836212">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</kw>
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-06-14T00:25:34.533533" elapsed="0.000016"/>
</return>
<var>${filename}</var>
<arg>netconf</arg>
<arg>netconf-testtool</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="FAIL" start="2026-06-14T00:25:33.689364" elapsed="0.844263">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</kw>
<kw name="Start_Testtool" owner="NetconfKeywords">
<arg>${filename}</arg>
<arg>${device-count}</arg>
<arg>${debug}</arg>
<arg>${schemas}</arg>
<arg>${rpc_config}</arg>
<arg>${tool_options}</arg>
<arg>${java_options}</arg>
<arg>${mdsal}</arg>
<arg>log_response=${log_response}</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /tmp/junos_19.4R1 unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.533926" elapsed="0.000025"/>
</kw>
<arg>debug=false</arg>
<arg>schemas=${schema_dir}</arg>
<arg>device-count=${devices}</arg>
<arg>log_response=False</arg>
<doc>Install and run testtool.</doc>
<status status="FAIL" start="2026-06-14T00:25:33.675078" elapsed="0.859013">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</kw>
<status status="FAIL" start="2026-06-14T00:25:33.674798" elapsed="0.859359">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</branch>
<branch type="ELSE">
<kw name="Start_Testtool" owner="NetconfKeywords">
<arg>${TESTTOOL_EXECUTABLE}</arg>
<arg>debug=false</arg>
<arg>schemas=${SCHEMAS}</arg>
<arg>device-count=${devices}</arg>
<arg>log_response=False</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /tmp/junos_19.4R1 unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.534466" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-06-14T00:25:34.534188" elapsed="0.000346"/>
</branch>
<status status="FAIL" start="2026-06-14T00:25:33.674778" elapsed="0.859781">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${devices_to_configure}</var>
<arg>${devices} - len(${device_names})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.534725" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${first_id}</var>
<arg>len(${device_names}) + 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.534896" elapsed="0.000020"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${use_node_encapsulation}</var>
<arg>${True}</arg>
<arg>${False}</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.543598" elapsed="0.000027"/>
</kw>
<kw name="Configure Device Range" owner="TopologyNetconfNodes">
<var>${device_names}</var>
<arg>restconf_url=${restconf_url}</arg>
<arg>device_name_prefix=${DEVICE_NAME_BASE}</arg>
<arg>device_ipaddress=${TOOLS_SYSTEM_IP}</arg>
<arg>device_port=17830</arg>
<arg>device_count=${devices_to_configure}</arg>
<arg>use_node_encapsulation=${use_node_encapsulation}</arg>
<arg>first_device_id=${first_id}</arg>
<doc>Generate device_count names in format "$device_name_prefix-$i" and configure them into NETCONF topology at specified RESTCONF URL.
For example:</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.543797" elapsed="0.000022"/>
</kw>
<kw name="Await Devices Connected" owner="TopologyNetconfNodes">
<arg>restconf_url=${restconf_url}</arg>
<arg>device_names=${device_names}</arg>
<arg>deadline_seconds=${timeout}</arg>
<arg>use_node_encapsulation=${use_node_encapsulation}</arg>
<doc>Await all specified devices to become connected in NETCONF topology at specified RESTCONF URL.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.543977" elapsed="0.000021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Issue_Requests_On_Devices</arg>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${devices}</arg>
<arg>${NUM_WORKERS}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.544194" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<break>
<status status="NOT RUN" start="2026-06-14T00:25:34.544350" elapsed="0.000021"/>
</break>
<status status="NOT RUN" start="2026-06-14T00:25:34.544306" elapsed="0.000092"/>
</branch>
<status status="NOT RUN" start="2026-06-14T00:25:34.544288" elapsed="0.000133"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<var>${maximum_devices}</var>
<arg>${devices}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.544576" elapsed="0.000021"/>
</kw>
<kw name="Stop_Testtool" owner="NetconfKeywords">
<doc>Stop testtool and download its log.</doc>
<status status="NOT RUN" start="2026-06-14T00:25:34.544814" elapsed="0.000025"/>
</kw>
<var name="${devices}">1000</var>
<status status="FAIL" start="2026-06-14T00:25:33.673056" elapsed="0.871832">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</iter>
<var>${devices}</var>
<value>${start}</value>
<value>${stop+1}</value>
<value>${increment}</value>
<status status="FAIL" start="2026-06-14T00:25:33.670114" elapsed="0.874835">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.</status>
</for>
<kw name="Run Keywords" owner="BuiltIn" type="TEARDOWN">
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-14T00:25:34.546666" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-06-14T00:25:34.546349" elapsed="0.000359"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-06-14T00:25:34.546856" elapsed="0.000209"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-06-14T00:25:34.546064" elapsed="0.001060"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-06-14T00:25:34.551261" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-59795-45-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-06-14T00:25:34.547281" elapsed="0.004040"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-06-14T00:25:34.555744" level="FAIL">Variable '${testtool_log}' not found.</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.551471" elapsed="0.004309">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.545724" elapsed="0.010165">Variable '${testtool_log}' not found.</status>
</kw>
<kw name="Collect_Data_Points">
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-06-14T00:25:34.556892" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv&lt;/a&gt;'.</msg>
<arg>${DEVICES_RESULT_FILE}</arg>
<arg>Max Devices\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-06-14T00:25:34.556402" elapsed="0.000550"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-06-14T00:25:34.557352" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv&lt;/a&gt;'.</msg>
<arg>${DEVICES_RESULT_FILE}</arg>
<arg>${devices}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-06-14T00:25:34.557105" elapsed="0.000298"/>
</kw>
<arg>${maximum_devices}</arg>
<doc>Parse and Log relevant information when Scale test finishes</doc>
<status status="PASS" start="2026-06-14T00:25:34.556046" elapsed="0.001413"/>
</kw>
<arg>NetconfKeywords.Stop_Testtool</arg>
<arg>AND</arg>
<arg>Collect_Data_Points</arg>
<arg>${maximum_devices}</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.545239" elapsed="0.012326">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Find max number of switches starting from ${MIN_SWITCHES} till reaching ${MAX_SWITCHES} in steps of ${STEP_SWITCHES}</doc>
<status status="FAIL" start="2026-06-14T00:24:33.283864" elapsed="61.273768">Component "netconf": searching for "netconf-api" found no version, cannot locate test tool.

Also teardown failed:
Variable '${testtool_log}' not found.</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-06-14T00:25:34.558367" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-06-14T00:25:34.558293" elapsed="0.000177"/>
</kw>
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-14T00:25:34.559449" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-06-14T00:25:34.559138" elapsed="0.000338"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-06-14T00:25:34.559622" elapsed="0.000221"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-06-14T00:25:34.558938" elapsed="0.000972"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-06-14T00:25:34.561840" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-59795-45-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-06-14T00:25:34.560051" elapsed="0.001848"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-06-14T00:25:34.566128" level="FAIL">Variable '${testtool_log}' not found.</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.562047" elapsed="0.004115">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.558668" elapsed="0.007602">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="FAIL" start="2026-06-14T00:25:34.558081" elapsed="0.008281">Variable '${testtool_log}' not found.</status>
</kw>
<doc>netconf-connector scaling test suite to find max connected devices

Copyright (c) 2019 Lumina Networks, 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


Increasing numbers of netconf devices will be connected and cleaned up
while validating and profiling between each iteration.</doc>
<status status="FAIL" start="2026-06-14T00:24:28.415482" elapsed="66.150934">Suite teardown failed:
Variable '${testtool_log}' not found.</status>
</suite>
<status status="FAIL" start="2026-06-14T00:24:22.970393" elapsed="71.596733"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="7" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="4" skip="0">critical</stat>
</tag>
<suite>
<stat name="netconf-scale-max-devices.txt" id="s1" pass="0" fail="7" skip="0">netconf-scale-max-devices.txt</stat>
<stat name="Ready" id="s1-s1" pass="0" fail="6" skip="0">netconf-scale-max-devices.txt.Ready</stat>
<stat name="Netconfready" id="s1-s1-s1" pass="0" fail="6" skip="0">netconf-scale-max-devices.txt.Ready.Netconfready</stat>
<stat name="Max Devices" id="s1-s2" pass="0" fail="1" skip="0">netconf-scale-max-devices.txt.Max Devices</stat>
</suite>
</statistics>
<errors>
<msg time="2026-06-14T00:24:28.429924" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-06-14T00:24:28.433973" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-06-14T00:24:28.434427" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-06-14T00:24:28.443761" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-06-14T00:24:28.445206" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-06-14T00:24:28.447088" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
